From 92c18f71c04d09c331091f0515f61b5dcca0ad2d Mon Sep 17 00:00:00 2001 From: Minseo-Jo Date: Wed, 29 Oct 2025 10:51:19 +0900 Subject: [PATCH] =?UTF-8?q?AI=20=EC=84=9C=EB=B9=84=EC=8A=A4=20=EC=9E=AC?= =?UTF-8?q?=EC=8B=9C=EC=9E=91=20=EC=8A=A4=ED=81=AC=EB=A6=BD=ED=8A=B8=20?= =?UTF-8?q?=EA=B0=9C=EC=84=A0=20=EB=B0=8F=20STT=20=EC=84=9C=EB=B9=84?= =?UTF-8?q?=EC=8A=A4=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - AI 서비스 reload 설정 비활성화 (포트 충돌 방지) - start.sh 삭제 및 restart.sh로 대체 - STT 서비스 로깅 및 WebSocket 핸들러 개선 - 회의 안건 섹션 마이그레이션 SQL 추가 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude --- ai-python/main.py | 2 +- ai-python/restart.sh | 115 + ai-python/start.sh | 35 - build/reports/problems/problems-report.html | 2 +- meeting/migrate-agenda-sections.sql | 142 + stt/logs/stt.log | 96229 ++++++++++++++++ .../stt/service/AzureSpeechService.java | 3 + stt/test-websocket.html | 423 + 8 files changed, 96914 insertions(+), 37 deletions(-) create mode 100755 ai-python/restart.sh delete mode 100755 ai-python/start.sh create mode 100644 meeting/migrate-agenda-sections.sql create mode 100644 stt/test-websocket.html diff --git a/ai-python/main.py b/ai-python/main.py index 1a6a468..fb18b02 100644 --- a/ai-python/main.py +++ b/ai-python/main.py @@ -123,6 +123,6 @@ if __name__ == "__main__": "main:app", host=settings.host, port=settings.port, - reload=True, # 개발 모드 + reload=False, # reload=True는 포트 충돌 발생 가능 log_level=settings.log_level.lower() ) diff --git a/ai-python/restart.sh b/ai-python/restart.sh new file mode 100755 index 0000000..78afc44 --- /dev/null +++ b/ai-python/restart.sh @@ -0,0 +1,115 @@ +#!/bin/bash + +# AI Python 서비스 재시작 스크립트 +# 8086 포트로 깔끔하게 재시작 + +echo "==================================" +echo "AI Python 서비스 재시작" +echo "==================================" + +# 1. 기존 프로세스 종료 +echo "1️⃣ 기존 프로세스 정리 중..." +pkill -9 -f "python.*main.py" 2>/dev/null +pkill -9 -f "uvicorn.*8086" 2>/dev/null +pkill -9 -f "uvicorn.*8087" 2>/dev/null + +# 잠시 대기 (포트 해제 대기) +sleep 2 + +# 2. 포트 확인 +echo "2️⃣ 포트 상태 확인..." +if lsof -i:8086 > /dev/null 2>&1; then + echo " ⚠️ 8086 포트가 아직 사용 중입니다." + echo " 강제 종료 시도..." + PID=$(lsof -ti:8086) + if [ ! -z "$PID" ]; then + kill -9 $PID + sleep 2 + fi +fi + +if lsof -i:8086 > /dev/null 2>&1; then + echo " ❌ 8086 포트를 해제할 수 없습니다." + echo " 시스템 재부팅 후 다시 시도하거나," + echo " 다른 포트를 사용하세요." + exit 1 +else + echo " ✅ 8086 포트 사용 가능" +fi + +# 3. 가상환경 활성화 +echo "3️⃣ 가상환경 활성화..." +if [ ! -d "venv" ]; then + echo " ❌ 가상환경이 없습니다. venv 디렉토리를 생성하세요." + exit 1 +fi + +source venv/bin/activate +echo " ✅ 가상환경 활성화 완료" + +# 4. 로그 디렉토리 확인 +mkdir -p ../logs + +# 5. 서비스 시작 +echo "4️⃣ AI Python 서비스 시작 (포트: 8086)..." +nohup python3 main.py > ../logs/ai-python.log 2>&1 & +PID=$! + +echo " PID: $PID" +echo " 로그: ../logs/ai-python.log" + +# 6. 시작 대기 +echo "5️⃣ 서비스 시작 대기 (7초)..." +sleep 7 + +# 7. 상태 확인 +echo "6️⃣ 서비스 상태 확인..." + +# 프로세스 확인 +if ps -p $PID > /dev/null; then + echo " ✅ 프로세스 실행 중 (PID: $PID)" +else + echo " ❌ 프로세스 종료됨" + echo " 로그 확인:" + tail -20 ../logs/ai-python.log + exit 1 +fi + +# 포트 확인 +if lsof -i:8086 > /dev/null 2>&1; then + echo " ✅ 8086 포트 리스닝 중" +else + echo " ⚠️ 8086 포트 아직 준비 중..." +fi + +# Health 체크 +echo "7️⃣ Health Check..." +sleep 2 +HEALTH=$(curl -s http://localhost:8086/health 2>/dev/null) + +if [ $? -eq 0 ]; then + echo " ✅ Health Check 성공" + echo " $HEALTH" +else + echo " ⚠️ Health Check 실패 (서버가 아직 시작 중일 수 있습니다)" + echo "" + echo " 최근 로그:" + tail -10 ../logs/ai-python.log +fi + +echo "" +echo "==================================" +echo "✅ AI Python 서비스 시작 완료" +echo "==================================" +echo "📊 서비스 정보:" +echo " - PID: $PID" +echo " - 포트: 8086" +echo " - 로그: tail -f ../logs/ai-python.log" +echo "" +echo "📡 엔드포인트:" +echo " - Health: http://localhost:8086/health" +echo " - Root: http://localhost:8086/" +echo " - Swagger: http://localhost:8086/swagger-ui.html" +echo "" +echo "🛑 서비스 중지: pkill -f 'python.*main.py'" +echo "==================================" diff --git a/ai-python/start.sh b/ai-python/start.sh deleted file mode 100755 index b0ac5af..0000000 --- a/ai-python/start.sh +++ /dev/null @@ -1,35 +0,0 @@ -#!/bin/bash - -# AI Service (Python) 시작 스크립트 - -echo "======================================" -echo "AI Service (Python) 시작" -echo "======================================" - -# 가상환경 활성화 (선택사항) -# source venv/bin/activate - -# 의존성 설치 확인 -if [ ! -d "venv" ]; then - echo "가상환경이 없습니다. 생성 중..." - python3 -m venv venv - source venv/bin/activate - pip install -r requirements.txt -else - source venv/bin/activate -fi - -# .env 파일 확인 -if [ ! -f ".env" ]; then - echo ".env 파일이 없습니다. .env.example을 복사합니다." - cp .env.example .env - echo "⚠️ .env 파일에 실제 API 키를 설정해주세요." -fi - -# FastAPI 서버 시작 -echo "======================================" -echo "FastAPI 서버 시작 중..." -echo "Port: 8086" -echo "======================================" - -python3 main.py diff --git a/build/reports/problems/problems-report.html b/build/reports/problems/problems-report.html index 955d178..1e5b690 100644 --- a/build/reports/problems/problems-report.html +++ b/build/reports/problems/problems-report.html @@ -650,7 +650,7 @@ code + .copy-button { diff --git a/meeting/migrate-agenda-sections.sql b/meeting/migrate-agenda-sections.sql new file mode 100644 index 0000000..f43ce7e --- /dev/null +++ b/meeting/migrate-agenda-sections.sql @@ -0,0 +1,142 @@ +-- ==================================================================== +-- agenda_sections 테이블 마이그레이션 스크립트 +-- +-- 목적: +-- 1. agenda_number: varchar(50) → integer 변환 +-- 2. decisions, pending_items, todos: text → json 변환 +-- 3. opinions 컬럼 삭제 (서비스에서 미사용) +-- +-- 실행 전 필수 작업: +-- 1. 데이터베이스 백업 (pg_dump) +-- 2. 테스트 환경에서 먼저 실행 및 검증 +-- ==================================================================== + +-- 트랜잭션 시작 +BEGIN; + +-- ==================================================================== +-- 1단계: 백업 테이블 생성 (롤백용) +-- ==================================================================== +CREATE TABLE IF NOT EXISTS agenda_sections_backup AS +SELECT * FROM agenda_sections; + +SELECT '✓ 백업 테이블 생성 완료: agenda_sections_backup' AS status; + +-- ==================================================================== +-- 2단계: agenda_number 컬럼 타입 변경 (varchar → integer) +-- ==================================================================== +-- 데이터 검증: 숫자가 아닌 값이 있는지 확인 +DO $$ +DECLARE + invalid_count INTEGER; +BEGIN + SELECT COUNT(*) INTO invalid_count + FROM agenda_sections + WHERE agenda_number !~ '^[0-9]+$'; + + IF invalid_count > 0 THEN + RAISE EXCEPTION '숫자가 아닌 agenda_number 값이 % 건 발견됨. 데이터 정리 필요.', invalid_count; + END IF; + + RAISE NOTICE '✓ agenda_number 데이터 검증 완료 (모두 숫자)'; +END $$; + +-- 타입 변경 실행 +ALTER TABLE agenda_sections + ALTER COLUMN agenda_number TYPE integer + USING agenda_number::integer; + +SELECT '✓ agenda_number 타입 변경 완료: varchar(50) → integer' AS status; + +-- ==================================================================== +-- 3단계: JSON 컬럼 타입 변경 (text → json) +-- ==================================================================== + +-- 3-1. decisions 컬럼 변경 +ALTER TABLE agenda_sections + ALTER COLUMN decisions TYPE json + USING CASE + WHEN decisions IS NULL OR decisions = '' THEN NULL + ELSE decisions::json + END; + +SELECT '✓ decisions 타입 변경 완료: text → json' AS status; + +-- 3-2. pending_items 컬럼 변경 +ALTER TABLE agenda_sections + ALTER COLUMN pending_items TYPE json + USING CASE + WHEN pending_items IS NULL OR pending_items = '' THEN NULL + ELSE pending_items::json + END; + +SELECT '✓ pending_items 타입 변경 완료: text → json' AS status; + +-- 3-3. todos 컬럼 변경 +ALTER TABLE agenda_sections + ALTER COLUMN todos TYPE json + USING CASE + WHEN todos IS NULL OR todos = '' THEN NULL + ELSE todos::json + END; + +SELECT '✓ todos 타입 변경 완료: text → json' AS status; + +-- ==================================================================== +-- 4단계: opinions 컬럼 삭제 (서비스에서 미사용) +-- ==================================================================== +ALTER TABLE agenda_sections + DROP COLUMN IF EXISTS opinions; + +SELECT '✓ opinions 컬럼 삭제 완료' AS status; + +-- ==================================================================== +-- 5단계: 변경 사항 검증 +-- ==================================================================== +DO $$ +DECLARE + rec RECORD; +BEGIN + -- 테이블 구조 확인 + SELECT + column_name, + data_type, + character_maximum_length, + is_nullable + INTO rec + FROM information_schema.columns + WHERE table_name = 'agenda_sections' + AND column_name = 'agenda_number'; + + RAISE NOTICE '========================================'; + RAISE NOTICE '✓ 마이그레이션 검증 결과'; + RAISE NOTICE '========================================'; + RAISE NOTICE 'agenda_number 타입: %', rec.data_type; + + -- 데이터 건수 확인 + RAISE NOTICE '원본 데이터 건수: %', (SELECT COUNT(*) FROM agenda_sections_backup); + RAISE NOTICE '마이그레이션 후 건수: %', (SELECT COUNT(*) FROM agenda_sections); + RAISE NOTICE '========================================'; +END $$; + +-- ==================================================================== +-- 커밋 또는 롤백 선택 +-- ==================================================================== +-- 문제가 없으면 COMMIT, 문제가 있으면 ROLLBACK 실행 + +-- 성공 시: COMMIT; +-- 실패 시: ROLLBACK; + +COMMIT; + +SELECT ' +==================================================================== +✓ 마이그레이션 완료! + +다음 작업: +1. 애플리케이션 재시작 +2. 기능 테스트 수행 +3. 문제 없으면 백업 테이블 삭제: + DROP TABLE agenda_sections_backup; +==================================================================== +' AS next_steps; diff --git a/stt/logs/stt.log b/stt/logs/stt.log index 7491095..30515bf 100644 --- a/stt/logs/stt.log +++ b/stt/logs/stt.log @@ -1861,3 +1861,96232 @@ This generated password is for development use only. Your security configuration 2025-10-27 16:01:34 [SpringApplicationShutdownHook] DEBUG o.h.type.spi.TypeConfiguration$Scope - Un-scoping TypeConfiguration [org.hibernate.type.spi.TypeConfiguration$Scope@52d919ef] from SessionFactory [org.hibernate.internal.SessionFactoryImpl@59da4992] 2025-10-27 16:01:34 [SpringApplicationShutdownHook] INFO com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Shutdown initiated... 2025-10-27 16:01:34 [SpringApplicationShutdownHook] INFO com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Shutdown completed. +2025-10-29 10:06:23 [main] INFO c.unicorn.hgzero.stt.SttApplication - Starting SttApplication using Java 23.0.2 with PID 50019 (/Users/jominseo/HGZero/stt/build/classes/java/main started by jominseo in /Users/jominseo/HGZero/stt) +2025-10-29 10:06:23 [main] DEBUG c.unicorn.hgzero.stt.SttApplication - Running with Spring Boot v3.3.5, Spring v6.1.14 +2025-10-29 10:06:23 [main] INFO c.unicorn.hgzero.stt.SttApplication - No active profile set, falling back to 1 default profile: "default" +2025-10-29 10:06:23 [main] INFO o.s.d.r.c.RepositoryConfigurationDelegate - Multiple Spring Data modules found, entering strict repository configuration mode +2025-10-29 10:06:23 [main] INFO o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data JPA repositories in DEFAULT mode. +2025-10-29 10:06:23 [main] INFO o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 39 ms. Found 3 JPA repository interfaces. +2025-10-29 10:06:23 [main] INFO o.s.d.r.c.RepositoryConfigurationDelegate - Multiple Spring Data modules found, entering strict repository configuration mode +2025-10-29 10:06:23 [main] INFO o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data Redis repositories in DEFAULT mode. +2025-10-29 10:06:23 [main] INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.unicorn.hgzero.stt.repository.jpa.RecordingRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-10-29 10:06:23 [main] INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.unicorn.hgzero.stt.repository.jpa.TranscriptSegmentRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-10-29 10:06:23 [main] INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.unicorn.hgzero.stt.repository.jpa.TranscriptionRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-10-29 10:06:23 [main] INFO o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 6 ms. Found 0 Redis repository interfaces. +2025-10-29 10:06:24 [main] INFO o.s.b.w.e.tomcat.TomcatWebServer - Tomcat initialized with port 8084 (http) +2025-10-29 10:06:24 [main] INFO o.a.catalina.core.StandardService - Starting service [Tomcat] +2025-10-29 10:06:24 [main] INFO o.a.catalina.core.StandardEngine - Starting Servlet engine: [Apache Tomcat/10.1.31] +2025-10-29 10:06:24 [main] INFO o.a.c.c.C.[Tomcat].[localhost].[/] - Initializing Spring embedded WebApplicationContext +2025-10-29 10:06:24 [main] INFO o.s.b.w.s.c.ServletWebServerApplicationContext - Root WebApplicationContext: initialization completed in 692 ms +2025-10-29 10:06:24 [main] INFO o.h.jpa.internal.util.LogHelper - HHH000204: Processing PersistenceUnitInfo [name: default] +2025-10-29 10:06:24 [main] INFO org.hibernate.Version - HHH000412: Hibernate ORM core version 6.5.3.Final +2025-10-29 10:06:24 [main] INFO o.h.c.i.RegionFactoryInitiator - HHH000026: Second-level cache disabled +2025-10-29 10:06:24 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration boolean -> org.hibernate.type.BasicTypeReference@4b5aa48b +2025-10-29 10:06:24 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration boolean -> org.hibernate.type.BasicTypeReference@4b5aa48b +2025-10-29 10:06:24 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Boolean -> org.hibernate.type.BasicTypeReference@4b5aa48b +2025-10-29 10:06:24 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration numeric_boolean -> org.hibernate.type.BasicTypeReference@51c008fd +2025-10-29 10:06:24 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration org.hibernate.type.NumericBooleanConverter -> org.hibernate.type.BasicTypeReference@51c008fd +2025-10-29 10:06:24 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration true_false -> org.hibernate.type.BasicTypeReference@70ed902a +2025-10-29 10:06:24 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration org.hibernate.type.TrueFalseConverter -> org.hibernate.type.BasicTypeReference@70ed902a +2025-10-29 10:06:24 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration yes_no -> org.hibernate.type.BasicTypeReference@22f80e36 +2025-10-29 10:06:24 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration org.hibernate.type.YesNoConverter -> org.hibernate.type.BasicTypeReference@22f80e36 +2025-10-29 10:06:24 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration byte -> org.hibernate.type.BasicTypeReference@3c98981e +2025-10-29 10:06:24 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration byte -> org.hibernate.type.BasicTypeReference@3c98981e +2025-10-29 10:06:24 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Byte -> org.hibernate.type.BasicTypeReference@3c98981e +2025-10-29 10:06:24 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration binary -> org.hibernate.type.BasicTypeReference@6dcee890 +2025-10-29 10:06:24 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration byte[] -> org.hibernate.type.BasicTypeReference@6dcee890 +2025-10-29 10:06:24 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration [B -> org.hibernate.type.BasicTypeReference@6dcee890 +2025-10-29 10:06:24 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration binary_wrapper -> org.hibernate.type.BasicTypeReference@713e49c3 +2025-10-29 10:06:24 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration wrapper-binary -> org.hibernate.type.BasicTypeReference@713e49c3 +2025-10-29 10:06:24 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration image -> org.hibernate.type.BasicTypeReference@13d5606c +2025-10-29 10:06:24 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration blob -> org.hibernate.type.BasicTypeReference@6bf54260 +2025-10-29 10:06:24 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.sql.Blob -> org.hibernate.type.BasicTypeReference@6bf54260 +2025-10-29 10:06:24 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration materialized_blob -> org.hibernate.type.BasicTypeReference@7165bde6 +2025-10-29 10:06:24 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration materialized_blob_wrapper -> org.hibernate.type.BasicTypeReference@72168258 +2025-10-29 10:06:24 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration short -> org.hibernate.type.BasicTypeReference@4af84a76 +2025-10-29 10:06:24 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration short -> org.hibernate.type.BasicTypeReference@4af84a76 +2025-10-29 10:06:24 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Short -> org.hibernate.type.BasicTypeReference@4af84a76 +2025-10-29 10:06:24 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration integer -> org.hibernate.type.BasicTypeReference@b5ff70b +2025-10-29 10:06:24 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration int -> org.hibernate.type.BasicTypeReference@b5ff70b +2025-10-29 10:06:24 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Integer -> org.hibernate.type.BasicTypeReference@b5ff70b +2025-10-29 10:06:24 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration long -> org.hibernate.type.BasicTypeReference@5709e10b +2025-10-29 10:06:24 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration long -> org.hibernate.type.BasicTypeReference@5709e10b +2025-10-29 10:06:24 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Long -> org.hibernate.type.BasicTypeReference@5709e10b +2025-10-29 10:06:24 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration float -> org.hibernate.type.BasicTypeReference@114badf0 +2025-10-29 10:06:24 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration float -> org.hibernate.type.BasicTypeReference@114badf0 +2025-10-29 10:06:24 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Float -> org.hibernate.type.BasicTypeReference@114badf0 +2025-10-29 10:06:24 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration double -> org.hibernate.type.BasicTypeReference@19e8fe55 +2025-10-29 10:06:24 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration double -> org.hibernate.type.BasicTypeReference@19e8fe55 +2025-10-29 10:06:24 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Double -> org.hibernate.type.BasicTypeReference@19e8fe55 +2025-10-29 10:06:24 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration big_integer -> org.hibernate.type.BasicTypeReference@6d7bb5cc +2025-10-29 10:06:24 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.math.BigInteger -> org.hibernate.type.BasicTypeReference@6d7bb5cc +2025-10-29 10:06:24 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration big_decimal -> org.hibernate.type.BasicTypeReference@756200d1 +2025-10-29 10:06:24 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.math.BigDecimal -> org.hibernate.type.BasicTypeReference@756200d1 +2025-10-29 10:06:24 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration character -> org.hibernate.type.BasicTypeReference@390a07a0 +2025-10-29 10:06:24 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration char -> org.hibernate.type.BasicTypeReference@390a07a0 +2025-10-29 10:06:24 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Character -> org.hibernate.type.BasicTypeReference@390a07a0 +2025-10-29 10:06:24 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration character_nchar -> org.hibernate.type.BasicTypeReference@674e4c82 +2025-10-29 10:06:24 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration string -> org.hibernate.type.BasicTypeReference@572b4072 +2025-10-29 10:06:24 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.String -> org.hibernate.type.BasicTypeReference@572b4072 +2025-10-29 10:06:24 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration nstring -> org.hibernate.type.BasicTypeReference@322ab6ce +2025-10-29 10:06:24 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration characters -> org.hibernate.type.BasicTypeReference@5b74902c +2025-10-29 10:06:24 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration char[] -> org.hibernate.type.BasicTypeReference@5b74902c +2025-10-29 10:06:24 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration [C -> org.hibernate.type.BasicTypeReference@5b74902c +2025-10-29 10:06:24 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration wrapper-characters -> org.hibernate.type.BasicTypeReference@4e4bfd9c +2025-10-29 10:06:24 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration text -> org.hibernate.type.BasicTypeReference@43ee1cf7 +2025-10-29 10:06:24 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration ntext -> org.hibernate.type.BasicTypeReference@24954e82 +2025-10-29 10:06:24 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration clob -> org.hibernate.type.BasicTypeReference@5b1f5fcc +2025-10-29 10:06:24 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.sql.Clob -> org.hibernate.type.BasicTypeReference@5b1f5fcc +2025-10-29 10:06:24 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration nclob -> org.hibernate.type.BasicTypeReference@4a29fe2e +2025-10-29 10:06:24 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.sql.NClob -> org.hibernate.type.BasicTypeReference@4a29fe2e +2025-10-29 10:06:24 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration materialized_clob -> org.hibernate.type.BasicTypeReference@79135a38 +2025-10-29 10:06:24 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration materialized_clob_char_array -> org.hibernate.type.BasicTypeReference@77fceac6 +2025-10-29 10:06:24 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration materialized_clob_character_array -> org.hibernate.type.BasicTypeReference@563c3aca +2025-10-29 10:06:24 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration materialized_nclob -> org.hibernate.type.BasicTypeReference@53e166ad +2025-10-29 10:06:24 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration materialized_nclob_character_array -> org.hibernate.type.BasicTypeReference@30c03473 +2025-10-29 10:06:24 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration materialized_nclob_char_array -> org.hibernate.type.BasicTypeReference@20fa5277 +2025-10-29 10:06:24 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration Duration -> org.hibernate.type.BasicTypeReference@17a7d6c8 +2025-10-29 10:06:24 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.Duration -> org.hibernate.type.BasicTypeReference@17a7d6c8 +2025-10-29 10:06:24 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration LocalDateTime -> org.hibernate.type.BasicTypeReference@4f2b1e9f +2025-10-29 10:06:24 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.LocalDateTime -> org.hibernate.type.BasicTypeReference@4f2b1e9f +2025-10-29 10:06:24 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration LocalDate -> org.hibernate.type.BasicTypeReference@7ef9c8a5 +2025-10-29 10:06:24 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.LocalDate -> org.hibernate.type.BasicTypeReference@7ef9c8a5 +2025-10-29 10:06:24 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration LocalTime -> org.hibernate.type.BasicTypeReference@c6244e7 +2025-10-29 10:06:24 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.LocalTime -> org.hibernate.type.BasicTypeReference@c6244e7 +2025-10-29 10:06:24 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration OffsetDateTime -> org.hibernate.type.BasicTypeReference@25dad235 +2025-10-29 10:06:24 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.OffsetDateTime -> org.hibernate.type.BasicTypeReference@25dad235 +2025-10-29 10:06:24 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration OffsetDateTimeWithTimezone -> org.hibernate.type.BasicTypeReference@3292eff7 +2025-10-29 10:06:24 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration OffsetDateTimeWithoutTimezone -> org.hibernate.type.BasicTypeReference@29ea5e0 +2025-10-29 10:06:24 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration OffsetTime -> org.hibernate.type.BasicTypeReference@1c459c28 +2025-10-29 10:06:24 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.OffsetTime -> org.hibernate.type.BasicTypeReference@1c459c28 +2025-10-29 10:06:24 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration OffsetTimeUtc -> org.hibernate.type.BasicTypeReference@6ffdbeef +2025-10-29 10:06:24 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration OffsetTimeWithTimezone -> org.hibernate.type.BasicTypeReference@4a3509b0 +2025-10-29 10:06:24 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration OffsetTimeWithoutTimezone -> org.hibernate.type.BasicTypeReference@3d7314b3 +2025-10-29 10:06:24 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration ZonedDateTime -> org.hibernate.type.BasicTypeReference@d677be9 +2025-10-29 10:06:24 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.ZonedDateTime -> org.hibernate.type.BasicTypeReference@d677be9 +2025-10-29 10:06:24 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration ZonedDateTimeWithTimezone -> org.hibernate.type.BasicTypeReference@fefb66c +2025-10-29 10:06:24 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration ZonedDateTimeWithoutTimezone -> org.hibernate.type.BasicTypeReference@6d7556a8 +2025-10-29 10:06:24 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration date -> org.hibernate.type.BasicTypeReference@48860139 +2025-10-29 10:06:24 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.sql.Date -> org.hibernate.type.BasicTypeReference@48860139 +2025-10-29 10:06:24 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration time -> org.hibernate.type.BasicTypeReference@7e0883f3 +2025-10-29 10:06:24 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.sql.Time -> org.hibernate.type.BasicTypeReference@7e0883f3 +2025-10-29 10:06:24 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration timestamp -> org.hibernate.type.BasicTypeReference@ca60688 +2025-10-29 10:06:24 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.sql.Timestamp -> org.hibernate.type.BasicTypeReference@ca60688 +2025-10-29 10:06:24 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.util.Date -> org.hibernate.type.BasicTypeReference@ca60688 +2025-10-29 10:06:24 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration calendar -> org.hibernate.type.BasicTypeReference@4ba1c1a2 +2025-10-29 10:06:24 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.util.Calendar -> org.hibernate.type.BasicTypeReference@4ba1c1a2 +2025-10-29 10:06:24 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.util.GregorianCalendar -> org.hibernate.type.BasicTypeReference@4ba1c1a2 +2025-10-29 10:06:24 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration calendar_date -> org.hibernate.type.BasicTypeReference@33568e26 +2025-10-29 10:06:24 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration calendar_time -> org.hibernate.type.BasicTypeReference@97b84a4 +2025-10-29 10:06:24 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration instant -> org.hibernate.type.BasicTypeReference@35555145 +2025-10-29 10:06:24 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.Instant -> org.hibernate.type.BasicTypeReference@35555145 +2025-10-29 10:06:24 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration uuid -> org.hibernate.type.BasicTypeReference@70bc3a9c +2025-10-29 10:06:24 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.util.UUID -> org.hibernate.type.BasicTypeReference@70bc3a9c +2025-10-29 10:06:24 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration pg-uuid -> org.hibernate.type.BasicTypeReference@70bc3a9c +2025-10-29 10:06:24 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration uuid-binary -> org.hibernate.type.BasicTypeReference@771cbd13 +2025-10-29 10:06:24 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration uuid-char -> org.hibernate.type.BasicTypeReference@229749f0 +2025-10-29 10:06:24 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration class -> org.hibernate.type.BasicTypeReference@3d57fb9e +2025-10-29 10:06:24 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Class -> org.hibernate.type.BasicTypeReference@3d57fb9e +2025-10-29 10:06:24 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration currency -> org.hibernate.type.BasicTypeReference@2c2e5e72 +2025-10-29 10:06:24 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration Currency -> org.hibernate.type.BasicTypeReference@2c2e5e72 +2025-10-29 10:06:24 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.util.Currency -> org.hibernate.type.BasicTypeReference@2c2e5e72 +2025-10-29 10:06:24 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration locale -> org.hibernate.type.BasicTypeReference@3e489ac1 +2025-10-29 10:06:24 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.util.Locale -> org.hibernate.type.BasicTypeReference@3e489ac1 +2025-10-29 10:06:24 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration serializable -> org.hibernate.type.BasicTypeReference@26888c31 +2025-10-29 10:06:24 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.io.Serializable -> org.hibernate.type.BasicTypeReference@26888c31 +2025-10-29 10:06:24 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration timezone -> org.hibernate.type.BasicTypeReference@24010875 +2025-10-29 10:06:24 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.util.TimeZone -> org.hibernate.type.BasicTypeReference@24010875 +2025-10-29 10:06:24 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration ZoneOffset -> org.hibernate.type.BasicTypeReference@7a021f49 +2025-10-29 10:06:24 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.ZoneOffset -> org.hibernate.type.BasicTypeReference@7a021f49 +2025-10-29 10:06:24 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration url -> org.hibernate.type.BasicTypeReference@e60c5a +2025-10-29 10:06:24 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.net.URL -> org.hibernate.type.BasicTypeReference@e60c5a +2025-10-29 10:06:24 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration vector -> org.hibernate.type.BasicTypeReference@626df173 +2025-10-29 10:06:24 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration row_version -> org.hibernate.type.BasicTypeReference@4e030feb +2025-10-29 10:06:24 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration object -> org.hibernate.type.JavaObjectType@5abb7a8f +2025-10-29 10:06:24 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Object -> org.hibernate.type.JavaObjectType@5abb7a8f +2025-10-29 10:06:24 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration null -> org.hibernate.type.NullType@3e595da3 +2025-10-29 10:06:24 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration imm_date -> org.hibernate.type.BasicTypeReference@5c0272e0 +2025-10-29 10:06:24 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration imm_time -> org.hibernate.type.BasicTypeReference@774304ca +2025-10-29 10:06:24 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration imm_timestamp -> org.hibernate.type.BasicTypeReference@303fbc4 +2025-10-29 10:06:24 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration imm_calendar -> org.hibernate.type.BasicTypeReference@4cd90c36 +2025-10-29 10:06:24 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration imm_calendar_date -> org.hibernate.type.BasicTypeReference@aa23f11 +2025-10-29 10:06:24 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration imm_calendar_time -> org.hibernate.type.BasicTypeReference@65a80fdb +2025-10-29 10:06:24 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration imm_binary -> org.hibernate.type.BasicTypeReference@79e90571 +2025-10-29 10:06:24 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration imm_serializable -> org.hibernate.type.BasicTypeReference@7d551ec6 +2025-10-29 10:06:24 [main] INFO o.s.o.j.p.SpringPersistenceUnitInfo - No LoadTimeWeaver setup: ignoring JPA class transformer +2025-10-29 10:06:24 [main] INFO com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Starting... +2025-10-29 10:06:24 [main] INFO com.zaxxer.hikari.pool.HikariPool - HikariPool-1 - Added connection org.postgresql.jdbc.PgConnection@7792e14f +2025-10-29 10:06:24 [main] INFO com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Start completed. +2025-10-29 10:06:24 [main] WARN org.hibernate.orm.deprecation - HHH90000025: PostgreSQLDialect does not need to be specified explicitly using 'hibernate.dialect' (remove the property setting and it will be selected by default) +2025-10-29 10:06:24 [main] DEBUG o.h.t.d.sql.spi.DdlTypeRegistry - addDescriptor(2003, org.hibernate.type.descriptor.sql.internal.ArrayDdlTypeImpl@6a2057e) replaced previous registration(org.hibernate.type.descriptor.sql.internal.ArrayDdlTypeImpl@25d9298e) +2025-10-29 10:06:24 [main] DEBUG o.h.t.d.sql.spi.DdlTypeRegistry - addDescriptor(6, org.hibernate.type.descriptor.sql.internal.CapacityDependentDdlType@6ab826bb) replaced previous registration(org.hibernate.type.descriptor.sql.internal.DdlTypeImpl@219db855) +2025-10-29 10:06:24 [main] DEBUG o.h.t.d.jdbc.spi.JdbcTypeRegistry - addDescriptor(2004, BlobTypeDescriptor(BLOB_BINDING)) replaced previous registration(BlobTypeDescriptor(DEFAULT)) +2025-10-29 10:06:24 [main] DEBUG o.h.t.d.jdbc.spi.JdbcTypeRegistry - addDescriptor(2005, ClobTypeDescriptor(CLOB_BINDING)) replaced previous registration(ClobTypeDescriptor(DEFAULT)) +2025-10-29 10:06:24 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration JAVA_OBJECT -> org.hibernate.type.JavaObjectType@59aba3c3 +2025-10-29 10:06:24 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Object -> org.hibernate.type.JavaObjectType@59aba3c3 +2025-10-29 10:06:24 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Type registration key [java.lang.Object] overrode previous entry : `org.hibernate.type.JavaObjectType@5abb7a8f` +2025-10-29 10:06:24 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration org.hibernate.type.DurationType -> basicType@1(java.time.Duration,3015) +2025-10-29 10:06:24 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration Duration -> basicType@1(java.time.Duration,3015) +2025-10-29 10:06:24 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.Duration -> basicType@1(java.time.Duration,3015) +2025-10-29 10:06:24 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration org.hibernate.type.OffsetDateTimeType -> basicType@2(java.time.OffsetDateTime,3003) +2025-10-29 10:06:24 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration OffsetDateTime -> basicType@2(java.time.OffsetDateTime,3003) +2025-10-29 10:06:24 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.OffsetDateTime -> basicType@2(java.time.OffsetDateTime,3003) +2025-10-29 10:06:24 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration org.hibernate.type.ZonedDateTimeType -> basicType@3(java.time.ZonedDateTime,3003) +2025-10-29 10:06:24 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration ZonedDateTime -> basicType@3(java.time.ZonedDateTime,3003) +2025-10-29 10:06:24 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.ZonedDateTime -> basicType@3(java.time.ZonedDateTime,3003) +2025-10-29 10:06:24 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration org.hibernate.type.OffsetTimeType -> basicType@4(java.time.OffsetTime,3007) +2025-10-29 10:06:24 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration OffsetTime -> basicType@4(java.time.OffsetTime,3007) +2025-10-29 10:06:24 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.OffsetTime -> basicType@4(java.time.OffsetTime,3007) +2025-10-29 10:06:24 [main] DEBUG o.h.type.spi.TypeConfiguration$Scope - Scoping TypeConfiguration [org.hibernate.type.spi.TypeConfiguration@6f651ac] to MetadataBuildingContext [org.hibernate.boot.internal.MetadataBuildingContextRootImpl@4a29a1e6] +2025-10-29 10:06:24 [main] INFO o.h.e.t.j.p.i.JtaPlatformInitiator - HHH000489: No JTA platform available (set 'hibernate.transaction.jta.platform' to enable JTA platform integration) +2025-10-29 10:06:24 [main] DEBUG o.h.type.spi.TypeConfiguration$Scope - Scoping TypeConfiguration [org.hibernate.type.spi.TypeConfiguration@6f651ac] to SessionFactoryImplementor [org.hibernate.internal.SessionFactoryImpl@215efb16] +2025-10-29 10:06:24 [main] DEBUG org.hibernate.SQL - + alter table if exists transcript_segments + alter column text set data type TEXT +2025-10-29 10:06:24 [main] DEBUG org.hibernate.SQL - + alter table if exists transcriptions + alter column full_text set data type TEXT +2025-10-29 10:06:24 [main] TRACE o.h.type.spi.TypeConfiguration$Scope - Handling #sessionFactoryCreated from [org.hibernate.internal.SessionFactoryImpl@215efb16] for TypeConfiguration +2025-10-29 10:06:24 [main] INFO o.s.o.j.LocalContainerEntityManagerFactoryBean - Initialized JPA EntityManagerFactory for persistence unit 'default' +2025-10-29 10:06:25 [main] ERROR i.n.r.d.DnsServerAddressStreamProviders - Unable to load io.netty.resolver.dns.macos.MacOSDnsServerAddressStreamProvider, fallback to system defaults. This may result in incorrect DNS resolutions on MacOS. Check whether you have a dependency on 'io.netty:netty-resolver-dns-native-macos'. Use DEBUG level to see the full stack: java.lang.UnsatisfiedLinkError: failed to load the required native library +2025-10-29 10:06:25 [main] INFO o.s.d.j.r.query.QueryEnhancerFactory - Hibernate is in classpath; If applicable, HQL parser will be used. +2025-10-29 10:06:25 [main] WARN c.u.h.stt.service.AzureSpeechService - Azure Speech Subscription Key 미설정 - 시뮬레이션 모드로 실행 +2025-10-29 10:06:25 [main] WARN o.s.b.a.o.j.JpaBaseConfiguration$JpaWebConfiguration - spring.jpa.open-in-view is enabled by default. Therefore, database queries may be performed during view rendering. Explicitly configure spring.jpa.open-in-view to disable this warning +2025-10-29 10:06:25 [main] WARN o.s.b.a.s.s.UserDetailsServiceAutoConfiguration - + +Using generated security password: 3d890eaf-3cfd-4e05-b72a-d64cb53bc7e6 + +This generated password is for development use only. Your security configuration must be updated before running your application in production. + +2025-10-29 10:06:25 [main] INFO o.s.s.c.a.a.c.InitializeUserDetailsBeanManagerConfigurer$InitializeUserDetailsManagerConfigurer - Global AuthenticationManager configured with UserDetailsService bean with name inMemoryUserDetailsManager +2025-10-29 10:06:25 [main] INFO o.s.b.a.e.web.EndpointLinksResolver - Exposing 3 endpoints beneath base path '/actuator' +2025-10-29 10:06:26 [main] INFO o.s.b.w.e.tomcat.TomcatWebServer - Tomcat started on port 8084 (http) with context path '/' +2025-10-29 10:06:26 [main] INFO c.unicorn.hgzero.stt.SttApplication - Started SttApplication in 2.784 seconds (process running for 2.922) +2025-10-29 10:06:36 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:06:36 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - 오디오 청크 없음 - meetingId: test-meeting-001 +2025-10-29 10:06:36 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:06:41 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:06:41 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - 오디오 청크 없음 - meetingId: test-meeting-001 +2025-10-29 10:06:41 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:06:47 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:06:47 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - 오디오 청크 없음 - meetingId: test-meeting-001 +2025-10-29 10:06:47 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:06:52 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:06:52 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - 오디오 청크 없음 - meetingId: test-meeting-001 +2025-10-29 10:06:52 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:06:57 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:06:57 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - 오디오 청크 없음 - meetingId: test-meeting-001 +2025-10-29 10:06:57 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:07:02 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:07:02 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - 오디오 청크 없음 - meetingId: test-meeting-001 +2025-10-29 10:07:02 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:07:07 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:07:07 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - 오디오 청크 없음 - meetingId: test-meeting-001 +2025-10-29 10:07:07 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:07:14 [scheduling-1] ERROR c.u.h.stt.service.AudioBufferService - 활성 회의 목록 조회 실패 +org.springframework.dao.QueryTimeoutException: Redis command timed out + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:68) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:665) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker.just(LettuceInvoker.java:94) + at org.springframework.data.redis.connection.lettuce.LettuceSetCommands.sMembers(LettuceSetCommands.java:129) + at org.springframework.data.redis.connection.DefaultedRedisConnection.sMembers(DefaultedRedisConnection.java:873) + at org.springframework.data.redis.core.DefaultSetOperations.lambda$members$11(DefaultSetOperations.java:180) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultSetOperations.members(DefaultSetOperations.java:180) + at com.unicorn.hgzero.stt.service.AudioBufferService.getActiveMeetings(AudioBufferService.java:144) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.getActiveMeetings() + at com.unicorn.hgzero.stt.service.AudioBatchProcessor.processAudioBatch(AudioBatchProcessor.java:45) + 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.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.stt.service.AudioBatchProcessor$$SpringCGLIB$$0.processAudioBatch() + 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.scheduling.support.ScheduledMethodRunnable.runInternal(ScheduledMethodRunnable.java:130) + at org.springframework.scheduling.support.ScheduledMethodRunnable.lambda$run$2(ScheduledMethodRunnable.java:124) + at io.micrometer.observation.Observation.observe(Observation.java:499) + at org.springframework.scheduling.support.ScheduledMethodRunnable.run(ScheduledMethodRunnable.java:124) + at org.springframework.scheduling.support.DelegatingErrorHandlingRunnable.run(DelegatingErrorHandlingRunnable.java:54) + at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:572) + at java.base/java.util.concurrent.FutureTask.runAndReset(FutureTask.java:358) + at java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:305) + 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:1575) +Caused by: io.lettuce.core.RedisCommandTimeoutException: Command timed out after 2 second(s) + at io.lettuce.core.internal.ExceptionFactory.createTimeoutException(ExceptionFactory.java:59) + at io.lettuce.core.internal.Futures.awaitOrCancel(Futures.java:246) + at io.lettuce.core.LettuceFutures.awaitOrCancel(LettuceFutures.java:74) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1010) + ... 65 common frames omitted +2025-10-29 10:07:14 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - 활성 회의 없음 - 배치 처리 스킵 +2025-10-29 10:07:19 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:07:19 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - 오디오 청크 없음 - meetingId: test-meeting-001 +2025-10-29 10:07:19 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:07:24 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:07:24 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - 오디오 청크 없음 - meetingId: test-meeting-001 +2025-10-29 10:07:24 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:07:29 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:07:29 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - 오디오 청크 없음 - meetingId: test-meeting-001 +2025-10-29 10:07:29 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:07:34 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:07:34 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - 오디오 청크 없음 - meetingId: test-meeting-001 +2025-10-29 10:07:34 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:07:39 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:07:39 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - 오디오 청크 없음 - meetingId: test-meeting-001 +2025-10-29 10:07:39 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:07:44 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:07:45 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - 오디오 청크 없음 - meetingId: test-meeting-001 +2025-10-29 10:07:45 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:07:50 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:07:50 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - 오디오 청크 없음 - meetingId: test-meeting-001 +2025-10-29 10:07:50 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:07:55 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:07:55 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - 오디오 청크 없음 - meetingId: test-meeting-001 +2025-10-29 10:07:55 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:08:00 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:08:00 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - 오디오 청크 없음 - meetingId: test-meeting-001 +2025-10-29 10:08:00 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:08:05 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:08:05 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - 오디오 청크 없음 - meetingId: test-meeting-001 +2025-10-29 10:08:05 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:08:10 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:08:10 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - 오디오 청크 없음 - meetingId: test-meeting-001 +2025-10-29 10:08:10 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:08:15 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:08:15 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - 오디오 청크 없음 - meetingId: test-meeting-001 +2025-10-29 10:08:15 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:08:20 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:08:20 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - 오디오 청크 없음 - meetingId: test-meeting-001 +2025-10-29 10:08:20 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:08:25 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:08:25 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - 오디오 청크 없음 - meetingId: test-meeting-001 +2025-10-29 10:08:25 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:08:29 [http-nio-8084-exec-1] INFO o.a.c.c.C.[Tomcat].[localhost].[/] - Initializing Spring DispatcherServlet 'dispatcherServlet' +2025-10-29 10:08:29 [http-nio-8084-exec-1] INFO o.s.web.servlet.DispatcherServlet - Initializing Servlet 'dispatcherServlet' +2025-10-29 10:08:29 [http-nio-8084-exec-1] INFO o.s.web.servlet.DispatcherServlet - Completed initialization in 1 ms +2025-10-29 10:08:29 [http-nio-8084-exec-1] INFO c.u.h.s.c.AudioWebSocketHandler - WebSocket 연결 성공 - sessionId: 0c68ca79-66cf-8624-4cb0-4a699f914418 +2025-10-29 10:08:31 [http-nio-8084-exec-2] INFO c.u.h.s.c.AudioWebSocketHandler - 녹음 시작 - sessionId: 0c68ca79-66cf-8624-4cb0-4a699f914418, meetingId: test-meeting-001 +2025-10-29 10:08:32 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:08:33 [http-nio-8084-exec-3] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.dao.QueryTimeoutException: Redis command timed out + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:68) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisCommandTimeoutException: Command timed out after 2 second(s) + at io.lettuce.core.internal.ExceptionFactory.createTimeoutException(ExceptionFactory.java:59) + at io.lettuce.core.internal.Futures.awaitOrCancel(Futures.java:246) + at io.lettuce.core.LettuceFutures.awaitOrCancel(LettuceFutures.java:74) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1010) + ... 61 common frames omitted +2025-10-29 10:08:33 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 0, size: 8236 bytes +2025-10-29 10:08:34 [scheduling-1] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 조회 실패 - meetingId: test-meeting-001 +org.springframework.dao.QueryTimeoutException: Redis command timed out + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:68) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultManyInvocationSpec.toList(LettuceInvoker.java:618) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xRange(LettuceStreamCommands.java:243) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xRange(DefaultedRedisConnection.java:595) + at org.springframework.data.redis.core.DefaultStreamOperations$3.inRedis(DefaultStreamOperations.java:237) + at org.springframework.data.redis.core.DefaultStreamOperations$RecordDeserializingRedisCallback.doInRedis(DefaultStreamOperations.java:336) + at org.springframework.data.redis.core.DefaultStreamOperations$RecordDeserializingRedisCallback.doInRedis(DefaultStreamOperations.java:331) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.range(DefaultStreamOperations.java:232) + at org.springframework.data.redis.core.StreamOperations.range(StreamOperations.java:364) + at com.unicorn.hgzero.stt.service.AudioBufferService.getAudioChunks(AudioBufferService.java:84) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.getAudioChunks() + at com.unicorn.hgzero.stt.service.AudioBatchProcessor.processOneMeeting(AudioBatchProcessor.java:72) + at com.unicorn.hgzero.stt.service.AudioBatchProcessor.processAudioBatch(AudioBatchProcessor.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.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.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.stt.service.AudioBatchProcessor$$SpringCGLIB$$0.processAudioBatch() + 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.scheduling.support.ScheduledMethodRunnable.runInternal(ScheduledMethodRunnable.java:130) + at org.springframework.scheduling.support.ScheduledMethodRunnable.lambda$run$2(ScheduledMethodRunnable.java:124) + at io.micrometer.observation.Observation.observe(Observation.java:499) + at org.springframework.scheduling.support.ScheduledMethodRunnable.run(ScheduledMethodRunnable.java:124) + at org.springframework.scheduling.support.DelegatingErrorHandlingRunnable.run(DelegatingErrorHandlingRunnable.java:54) + at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:572) + at java.base/java.util.concurrent.FutureTask.runAndReset(FutureTask.java:358) + at java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:305) + 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:1575) +Caused by: io.lettuce.core.RedisCommandTimeoutException: Command timed out after 2 second(s) + at io.lettuce.core.internal.ExceptionFactory.createTimeoutException(ExceptionFactory.java:59) + at io.lettuce.core.internal.Futures.awaitOrCancel(Futures.java:246) + at io.lettuce.core.LettuceFutures.awaitOrCancel(LettuceFutures.java:74) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1010) + ... 69 common frames omitted +2025-10-29 10:08:34 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - 오디오 청크 없음 - meetingId: test-meeting-001 +2025-10-29 10:08:34 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:08:35 [http-nio-8084-exec-3] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.dao.QueryTimeoutException: Redis command timed out + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:68) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisCommandTimeoutException: Command timed out after 2 second(s) + at io.lettuce.core.internal.ExceptionFactory.createTimeoutException(ExceptionFactory.java:59) + at io.lettuce.core.internal.Futures.awaitOrCancel(Futures.java:246) + at io.lettuce.core.LettuceFutures.awaitOrCancel(LettuceFutures.java:74) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1010) + ... 61 common frames omitted +2025-10-29 10:08:35 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 1, size: 8236 bytes +2025-10-29 10:08:37 [http-nio-8084-exec-3] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.dao.QueryTimeoutException: Redis command timed out + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:68) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisCommandTimeoutException: Command timed out after 2 second(s) + at io.lettuce.core.internal.ExceptionFactory.createTimeoutException(ExceptionFactory.java:59) + at io.lettuce.core.internal.Futures.awaitOrCancel(Futures.java:246) + at io.lettuce.core.LettuceFutures.awaitOrCancel(LettuceFutures.java:74) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1010) + ... 61 common frames omitted +2025-10-29 10:08:37 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 2, size: 8236 bytes +2025-10-29 10:08:38 [http-nio-8084-exec-3] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:08:38 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 3, size: 8236 bytes +2025-10-29 10:08:38 [http-nio-8084-exec-3] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:08:38 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 4, size: 8236 bytes +2025-10-29 10:08:38 [http-nio-8084-exec-3] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:08:38 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 5, size: 8236 bytes +2025-10-29 10:08:38 [http-nio-8084-exec-3] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:08:38 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 6, size: 8236 bytes +2025-10-29 10:08:38 [http-nio-8084-exec-3] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:08:38 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 7, size: 8236 bytes +2025-10-29 10:08:39 [http-nio-8084-exec-3] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:08:39 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 8, size: 8236 bytes +2025-10-29 10:08:39 [http-nio-8084-exec-3] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:08:39 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 9, size: 8236 bytes +2025-10-29 10:08:39 [http-nio-8084-exec-3] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:08:39 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 10, size: 8236 bytes +2025-10-29 10:08:39 [http-nio-8084-exec-3] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:08:39 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 11, size: 8236 bytes +2025-10-29 10:08:39 [http-nio-8084-exec-3] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:08:39 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 12, size: 8236 bytes +2025-10-29 10:08:39 [http-nio-8084-exec-3] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:08:39 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 13, size: 8236 bytes +2025-10-29 10:08:39 [http-nio-8084-exec-3] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:08:39 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 14, size: 8236 bytes +2025-10-29 10:08:39 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:08:39 [http-nio-8084-exec-3] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:08:39 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 15, size: 8236 bytes +2025-10-29 10:08:39 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - 오디오 청크 없음 - meetingId: test-meeting-001 +2025-10-29 10:08:39 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:08:39 [http-nio-8084-exec-3] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:08:39 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 16, size: 8236 bytes +2025-10-29 10:08:39 [http-nio-8084-exec-3] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:08:39 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 17, size: 8236 bytes +2025-10-29 10:08:39 [http-nio-8084-exec-3] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:08:39 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 18, size: 8236 bytes +2025-10-29 10:08:39 [http-nio-8084-exec-3] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:08:39 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 19, size: 8236 bytes +2025-10-29 10:08:39 [http-nio-8084-exec-3] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:08:39 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 20, size: 8236 bytes +2025-10-29 10:08:39 [http-nio-8084-exec-3] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:08:39 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 21, size: 8236 bytes +2025-10-29 10:08:39 [http-nio-8084-exec-3] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:08:39 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 22, size: 8236 bytes +2025-10-29 10:08:39 [http-nio-8084-exec-3] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:08:39 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 23, size: 8236 bytes +2025-10-29 10:08:39 [http-nio-8084-exec-3] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:08:39 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 24, size: 8236 bytes +2025-10-29 10:08:39 [http-nio-8084-exec-3] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:08:39 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 25, size: 8236 bytes +2025-10-29 10:08:39 [http-nio-8084-exec-3] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:08:39 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 26, size: 8236 bytes +2025-10-29 10:08:39 [http-nio-8084-exec-3] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:08:39 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 27, size: 8236 bytes +2025-10-29 10:08:39 [http-nio-8084-exec-3] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:08:39 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 28, size: 8236 bytes +2025-10-29 10:08:39 [http-nio-8084-exec-3] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:08:39 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 29, size: 8236 bytes +2025-10-29 10:08:39 [http-nio-8084-exec-3] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:08:39 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 30, size: 8236 bytes +2025-10-29 10:08:39 [http-nio-8084-exec-3] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:08:39 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 31, size: 8236 bytes +2025-10-29 10:08:40 [http-nio-8084-exec-4] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:08:40 [http-nio-8084-exec-4] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 32, size: 8236 bytes +2025-10-29 10:08:40 [http-nio-8084-exec-5] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:08:40 [http-nio-8084-exec-5] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 33, size: 8236 bytes +2025-10-29 10:08:40 [http-nio-8084-exec-6] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:08:40 [http-nio-8084-exec-6] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 34, size: 8236 bytes +2025-10-29 10:08:40 [http-nio-8084-exec-7] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:08:40 [http-nio-8084-exec-7] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 35, size: 8236 bytes +2025-10-29 10:08:41 [http-nio-8084-exec-8] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:08:41 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 36, size: 8236 bytes +2025-10-29 10:08:41 [http-nio-8084-exec-9] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:08:41 [http-nio-8084-exec-9] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 37, size: 8236 bytes +2025-10-29 10:08:41 [http-nio-8084-exec-10] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:08:41 [http-nio-8084-exec-10] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 38, size: 8236 bytes +2025-10-29 10:08:41 [http-nio-8084-exec-1] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:08:41 [http-nio-8084-exec-1] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 39, size: 8236 bytes +2025-10-29 10:08:42 [http-nio-8084-exec-2] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:08:42 [http-nio-8084-exec-2] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 40, size: 8236 bytes +2025-10-29 10:08:42 [http-nio-8084-exec-3] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:08:42 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 41, size: 8236 bytes +2025-10-29 10:08:42 [http-nio-8084-exec-3] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:08:42 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 42, size: 8236 bytes +2025-10-29 10:08:43 [http-nio-8084-exec-3] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:08:43 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 43, size: 8236 bytes +2025-10-29 10:08:43 [http-nio-8084-exec-4] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:08:43 [http-nio-8084-exec-4] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 44, size: 8236 bytes +2025-10-29 10:08:43 [http-nio-8084-exec-5] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:08:43 [http-nio-8084-exec-5] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 45, size: 8236 bytes +2025-10-29 10:08:43 [http-nio-8084-exec-6] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:08:43 [http-nio-8084-exec-6] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 46, size: 8236 bytes +2025-10-29 10:08:43 [http-nio-8084-exec-7] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:08:43 [http-nio-8084-exec-7] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 47, size: 8236 bytes +2025-10-29 10:08:44 [http-nio-8084-exec-8] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:08:44 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 48, size: 8236 bytes +2025-10-29 10:08:44 [http-nio-8084-exec-9] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:08:44 [http-nio-8084-exec-9] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 49, size: 8236 bytes +2025-10-29 10:08:44 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:08:44 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - 오디오 청크 없음 - meetingId: test-meeting-001 +2025-10-29 10:08:44 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:08:44 [http-nio-8084-exec-10] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:08:44 [http-nio-8084-exec-10] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 50, size: 8236 bytes +2025-10-29 10:08:44 [http-nio-8084-exec-1] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:08:44 [http-nio-8084-exec-1] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 51, size: 8236 bytes +2025-10-29 10:08:45 [http-nio-8084-exec-2] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:08:45 [http-nio-8084-exec-2] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 52, size: 8236 bytes +2025-10-29 10:08:45 [http-nio-8084-exec-3] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:08:45 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 53, size: 8236 bytes +2025-10-29 10:08:45 [http-nio-8084-exec-4] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:08:45 [http-nio-8084-exec-4] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 54, size: 8236 bytes +2025-10-29 10:08:46 [http-nio-8084-exec-5] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:08:46 [http-nio-8084-exec-5] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 55, size: 8236 bytes +2025-10-29 10:08:46 [http-nio-8084-exec-6] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:08:46 [http-nio-8084-exec-6] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 56, size: 8236 bytes +2025-10-29 10:08:46 [http-nio-8084-exec-7] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:08:46 [http-nio-8084-exec-7] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 57, size: 8236 bytes +2025-10-29 10:08:46 [http-nio-8084-exec-8] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:08:46 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 58, size: 8236 bytes +2025-10-29 10:08:47 [http-nio-8084-exec-9] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:08:47 [http-nio-8084-exec-9] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 59, size: 8236 bytes +2025-10-29 10:08:47 [http-nio-8084-exec-10] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:08:47 [http-nio-8084-exec-10] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 60, size: 8236 bytes +2025-10-29 10:08:47 [http-nio-8084-exec-1] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:08:47 [http-nio-8084-exec-1] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 61, size: 8236 bytes +2025-10-29 10:08:47 [http-nio-8084-exec-2] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:08:47 [http-nio-8084-exec-2] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 62, size: 8236 bytes +2025-10-29 10:08:48 [http-nio-8084-exec-3] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:08:48 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 63, size: 8236 bytes +2025-10-29 10:08:48 [http-nio-8084-exec-4] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:08:48 [http-nio-8084-exec-4] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 64, size: 8236 bytes +2025-10-29 10:08:48 [http-nio-8084-exec-5] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:08:48 [http-nio-8084-exec-5] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 65, size: 8236 bytes +2025-10-29 10:08:48 [http-nio-8084-exec-6] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:08:48 [http-nio-8084-exec-6] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 66, size: 8236 bytes +2025-10-29 10:08:49 [http-nio-8084-exec-7] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:08:49 [http-nio-8084-exec-7] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 67, size: 8236 bytes +2025-10-29 10:08:49 [http-nio-8084-exec-8] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:08:49 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 68, size: 8236 bytes +2025-10-29 10:08:49 [http-nio-8084-exec-9] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:08:49 [http-nio-8084-exec-9] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 69, size: 8236 bytes +2025-10-29 10:08:49 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:08:49 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - 오디오 청크 없음 - meetingId: test-meeting-001 +2025-10-29 10:08:49 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:08:49 [http-nio-8084-exec-10] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:08:49 [http-nio-8084-exec-10] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 70, size: 8236 bytes +2025-10-29 10:08:50 [http-nio-8084-exec-1] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:08:50 [http-nio-8084-exec-1] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 71, size: 8236 bytes +2025-10-29 10:08:50 [http-nio-8084-exec-2] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:08:50 [http-nio-8084-exec-2] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 72, size: 8236 bytes +2025-10-29 10:08:50 [http-nio-8084-exec-3] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:08:50 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 73, size: 8236 bytes +2025-10-29 10:08:50 [http-nio-8084-exec-4] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:08:50 [http-nio-8084-exec-4] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 74, size: 8236 bytes +2025-10-29 10:08:51 [http-nio-8084-exec-5] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:08:51 [http-nio-8084-exec-5] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 75, size: 8236 bytes +2025-10-29 10:08:51 [http-nio-8084-exec-6] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:08:51 [http-nio-8084-exec-6] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 76, size: 8236 bytes +2025-10-29 10:08:51 [http-nio-8084-exec-7] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:08:51 [http-nio-8084-exec-7] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 77, size: 8236 bytes +2025-10-29 10:08:51 [http-nio-8084-exec-8] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:08:51 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 78, size: 8236 bytes +2025-10-29 10:08:52 [http-nio-8084-exec-9] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:08:52 [http-nio-8084-exec-9] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 79, size: 8236 bytes +2025-10-29 10:08:52 [http-nio-8084-exec-10] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:08:52 [http-nio-8084-exec-10] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 80, size: 8236 bytes +2025-10-29 10:08:52 [http-nio-8084-exec-1] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:08:52 [http-nio-8084-exec-1] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 81, size: 8236 bytes +2025-10-29 10:08:52 [http-nio-8084-exec-2] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:08:52 [http-nio-8084-exec-2] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 82, size: 8236 bytes +2025-10-29 10:08:53 [SpringApplicationShutdownHook] INFO o.s.o.j.LocalContainerEntityManagerFactoryBean - Closing JPA EntityManagerFactory for persistence unit 'default' +2025-10-29 10:08:53 [SpringApplicationShutdownHook] TRACE o.h.type.spi.TypeConfiguration$Scope - Handling #sessionFactoryClosed from [org.hibernate.internal.SessionFactoryImpl@215efb16] for TypeConfiguration +2025-10-29 10:08:53 [SpringApplicationShutdownHook] DEBUG o.h.type.spi.TypeConfiguration$Scope - Un-scoping TypeConfiguration [org.hibernate.type.spi.TypeConfiguration$Scope@6fcd8f4a] from SessionFactory [org.hibernate.internal.SessionFactoryImpl@215efb16] +2025-10-29 10:08:53 [SpringApplicationShutdownHook] INFO com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Shutdown initiated... +2025-10-29 10:08:53 [SpringApplicationShutdownHook] INFO com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Shutdown completed. +2025-10-29 10:08:53 [SpringApplicationShutdownHook] ERROR c.u.h.s.c.AudioWebSocketHandler - WebSocket 전송 오류 - sessionId: 0c68ca79-66cf-8624-4cb0-4a699f914418 +java.io.IOException: java.nio.channels.ClosedChannelException + at org.apache.tomcat.websocket.WsRemoteEndpointImplBase.sendMessageBlockInternal(WsRemoteEndpointImplBase.java:326) + at org.apache.tomcat.websocket.WsRemoteEndpointImplBase.sendMessageBlock(WsRemoteEndpointImplBase.java:266) + at org.apache.tomcat.websocket.WsSession.sendCloseMessage(WsSession.java:792) + at org.apache.tomcat.websocket.WsSession.doClose(WsSession.java:589) + at org.apache.tomcat.websocket.WsSession.doClose(WsSession.java:556) + at org.apache.tomcat.websocket.WsSession.close(WsSession.java:544) + at org.apache.tomcat.websocket.WsWebSocketContainer.destroy(WsWebSocketContainer.java:1024) + at org.apache.tomcat.websocket.server.WsContextListener.contextDestroyed(WsContextListener.java:46) + at org.apache.catalina.core.StandardContext.listenerStop(StandardContext.java:4039) + at org.apache.catalina.core.StandardContext.stopInternal(StandardContext.java:4648) + at org.apache.catalina.util.LifecycleBase.stop(LifecycleBase.java:231) + at org.apache.catalina.core.ContainerBase$StopChild.call(ContainerBase.java:1219) + at org.apache.catalina.core.ContainerBase$StopChild.call(ContainerBase.java:1208) + at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:317) + at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:75) + at java.base/java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:148) + at org.apache.catalina.core.ContainerBase.stopInternal(ContainerBase.java:814) + at org.apache.catalina.util.LifecycleBase.stop(LifecycleBase.java:231) + at org.apache.catalina.core.ContainerBase$StopChild.call(ContainerBase.java:1219) + at org.apache.catalina.core.ContainerBase$StopChild.call(ContainerBase.java:1208) + at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:317) + at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:75) + at java.base/java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:148) + at org.apache.catalina.core.ContainerBase.stopInternal(ContainerBase.java:814) + at org.apache.catalina.util.LifecycleBase.stop(LifecycleBase.java:231) + at org.apache.catalina.core.StandardService.stopInternal(StandardService.java:471) + at org.apache.catalina.util.LifecycleBase.stop(LifecycleBase.java:231) + at org.apache.catalina.core.StandardServer.stopInternal(StandardServer.java:915) + at org.apache.catalina.util.LifecycleBase.stop(LifecycleBase.java:231) + at org.apache.catalina.startup.Tomcat.stop(Tomcat.java:447) + at org.springframework.boot.web.embedded.tomcat.TomcatWebServer.stopTomcat(TomcatWebServer.java:301) + at org.springframework.boot.web.embedded.tomcat.TomcatWebServer.destroy(TomcatWebServer.java:374) + at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.doClose(ServletWebServerApplicationContext.java:177) + at org.springframework.context.support.AbstractApplicationContext.close(AbstractApplicationContext.java:1102) + at org.springframework.boot.SpringApplicationShutdownHook.closeAndWait(SpringApplicationShutdownHook.java:145) + at java.base/java.lang.Iterable.forEach(Iterable.java:75) + at org.springframework.boot.SpringApplicationShutdownHook.run(SpringApplicationShutdownHook.java:114) + at java.base/java.lang.Thread.run(Thread.java:1575) +Caused by: java.nio.channels.ClosedChannelException: null + at org.apache.tomcat.util.net.NioChannel$1.write(NioChannel.java:273) + at org.apache.tomcat.util.net.NioEndpoint$NioSocketWrapper$NioOperationState.run(NioEndpoint.java:1632) + at org.apache.tomcat.util.net.SocketWrapperBase$OperationState.start(SocketWrapperBase.java:1051) + at org.apache.tomcat.util.net.SocketWrapperBase.vectoredOperation(SocketWrapperBase.java:1440) + at org.apache.tomcat.util.net.SocketWrapperBase.write(SocketWrapperBase.java:1366) + at org.apache.tomcat.util.net.SocketWrapperBase.write(SocketWrapperBase.java:1337) + at org.apache.tomcat.websocket.server.WsRemoteEndpointImplServer.doWrite(WsRemoteEndpointImplServer.java:171) + at org.apache.tomcat.websocket.WsRemoteEndpointImplBase.writeMessagePart(WsRemoteEndpointImplBase.java:521) + at org.apache.tomcat.websocket.WsRemoteEndpointImplBase.sendMessageBlockInternal(WsRemoteEndpointImplBase.java:313) + ... 37 common frames omitted +2025-10-29 10:08:53 [SpringApplicationShutdownHook] INFO c.u.h.s.c.AudioWebSocketHandler - WebSocket 연결 종료 - sessionId: 0c68ca79-66cf-8624-4cb0-4a699f914418, meetingId: test-meeting-001, status: CloseStatus[code=1001, reason=The web application is stopping] +2025-10-29 10:11:49 [main] INFO c.unicorn.hgzero.stt.SttApplication - Starting SttApplication using Java 23.0.2 with PID 50987 (/Users/jominseo/HGZero/stt/build/classes/java/main started by jominseo in /Users/jominseo/HGZero/stt) +2025-10-29 10:11:49 [main] DEBUG c.unicorn.hgzero.stt.SttApplication - Running with Spring Boot v3.3.5, Spring v6.1.14 +2025-10-29 10:11:49 [main] INFO c.unicorn.hgzero.stt.SttApplication - No active profile set, falling back to 1 default profile: "default" +2025-10-29 10:11:49 [main] INFO o.s.d.r.c.RepositoryConfigurationDelegate - Multiple Spring Data modules found, entering strict repository configuration mode +2025-10-29 10:11:49 [main] INFO o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data JPA repositories in DEFAULT mode. +2025-10-29 10:11:49 [main] INFO o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 39 ms. Found 3 JPA repository interfaces. +2025-10-29 10:11:49 [main] INFO o.s.d.r.c.RepositoryConfigurationDelegate - Multiple Spring Data modules found, entering strict repository configuration mode +2025-10-29 10:11:49 [main] INFO o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data Redis repositories in DEFAULT mode. +2025-10-29 10:11:49 [main] INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.unicorn.hgzero.stt.repository.jpa.RecordingRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-10-29 10:11:49 [main] INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.unicorn.hgzero.stt.repository.jpa.TranscriptSegmentRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-10-29 10:11:49 [main] INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.unicorn.hgzero.stt.repository.jpa.TranscriptionRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-10-29 10:11:49 [main] INFO o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 6 ms. Found 0 Redis repository interfaces. +2025-10-29 10:11:50 [main] INFO o.s.b.w.e.tomcat.TomcatWebServer - Tomcat initialized with port 8084 (http) +2025-10-29 10:11:50 [main] INFO o.a.catalina.core.StandardService - Starting service [Tomcat] +2025-10-29 10:11:50 [main] INFO o.a.catalina.core.StandardEngine - Starting Servlet engine: [Apache Tomcat/10.1.31] +2025-10-29 10:11:50 [main] INFO o.a.c.c.C.[Tomcat].[localhost].[/] - Initializing Spring embedded WebApplicationContext +2025-10-29 10:11:50 [main] INFO o.s.b.w.s.c.ServletWebServerApplicationContext - Root WebApplicationContext: initialization completed in 652 ms +2025-10-29 10:11:50 [main] INFO o.h.jpa.internal.util.LogHelper - HHH000204: Processing PersistenceUnitInfo [name: default] +2025-10-29 10:11:50 [main] INFO org.hibernate.Version - HHH000412: Hibernate ORM core version 6.5.3.Final +2025-10-29 10:11:50 [main] INFO o.h.c.i.RegionFactoryInitiator - HHH000026: Second-level cache disabled +2025-10-29 10:11:50 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration boolean -> org.hibernate.type.BasicTypeReference@3d7314b3 +2025-10-29 10:11:50 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration boolean -> org.hibernate.type.BasicTypeReference@3d7314b3 +2025-10-29 10:11:50 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Boolean -> org.hibernate.type.BasicTypeReference@3d7314b3 +2025-10-29 10:11:50 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration numeric_boolean -> org.hibernate.type.BasicTypeReference@d677be9 +2025-10-29 10:11:50 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration org.hibernate.type.NumericBooleanConverter -> org.hibernate.type.BasicTypeReference@d677be9 +2025-10-29 10:11:50 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration true_false -> org.hibernate.type.BasicTypeReference@fefb66c +2025-10-29 10:11:50 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration org.hibernate.type.TrueFalseConverter -> org.hibernate.type.BasicTypeReference@fefb66c +2025-10-29 10:11:50 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration yes_no -> org.hibernate.type.BasicTypeReference@6d7556a8 +2025-10-29 10:11:50 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration org.hibernate.type.YesNoConverter -> org.hibernate.type.BasicTypeReference@6d7556a8 +2025-10-29 10:11:50 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration byte -> org.hibernate.type.BasicTypeReference@48860139 +2025-10-29 10:11:50 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration byte -> org.hibernate.type.BasicTypeReference@48860139 +2025-10-29 10:11:50 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Byte -> org.hibernate.type.BasicTypeReference@48860139 +2025-10-29 10:11:50 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration binary -> org.hibernate.type.BasicTypeReference@7e0883f3 +2025-10-29 10:11:50 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration byte[] -> org.hibernate.type.BasicTypeReference@7e0883f3 +2025-10-29 10:11:50 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration [B -> org.hibernate.type.BasicTypeReference@7e0883f3 +2025-10-29 10:11:50 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration binary_wrapper -> org.hibernate.type.BasicTypeReference@ca60688 +2025-10-29 10:11:50 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration wrapper-binary -> org.hibernate.type.BasicTypeReference@ca60688 +2025-10-29 10:11:50 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration image -> org.hibernate.type.BasicTypeReference@4ba1c1a2 +2025-10-29 10:11:50 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration blob -> org.hibernate.type.BasicTypeReference@33568e26 +2025-10-29 10:11:50 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.sql.Blob -> org.hibernate.type.BasicTypeReference@33568e26 +2025-10-29 10:11:50 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration materialized_blob -> org.hibernate.type.BasicTypeReference@97b84a4 +2025-10-29 10:11:50 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration materialized_blob_wrapper -> org.hibernate.type.BasicTypeReference@35555145 +2025-10-29 10:11:50 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration short -> org.hibernate.type.BasicTypeReference@70bc3a9c +2025-10-29 10:11:50 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration short -> org.hibernate.type.BasicTypeReference@70bc3a9c +2025-10-29 10:11:50 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Short -> org.hibernate.type.BasicTypeReference@70bc3a9c +2025-10-29 10:11:50 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration integer -> org.hibernate.type.BasicTypeReference@771cbd13 +2025-10-29 10:11:50 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration int -> org.hibernate.type.BasicTypeReference@771cbd13 +2025-10-29 10:11:50 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Integer -> org.hibernate.type.BasicTypeReference@771cbd13 +2025-10-29 10:11:50 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration long -> org.hibernate.type.BasicTypeReference@229749f0 +2025-10-29 10:11:50 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration long -> org.hibernate.type.BasicTypeReference@229749f0 +2025-10-29 10:11:50 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Long -> org.hibernate.type.BasicTypeReference@229749f0 +2025-10-29 10:11:50 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration float -> org.hibernate.type.BasicTypeReference@3d57fb9e +2025-10-29 10:11:50 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration float -> org.hibernate.type.BasicTypeReference@3d57fb9e +2025-10-29 10:11:50 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Float -> org.hibernate.type.BasicTypeReference@3d57fb9e +2025-10-29 10:11:50 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration double -> org.hibernate.type.BasicTypeReference@2c2e5e72 +2025-10-29 10:11:50 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration double -> org.hibernate.type.BasicTypeReference@2c2e5e72 +2025-10-29 10:11:50 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Double -> org.hibernate.type.BasicTypeReference@2c2e5e72 +2025-10-29 10:11:50 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration big_integer -> org.hibernate.type.BasicTypeReference@3e489ac1 +2025-10-29 10:11:50 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.math.BigInteger -> org.hibernate.type.BasicTypeReference@3e489ac1 +2025-10-29 10:11:50 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration big_decimal -> org.hibernate.type.BasicTypeReference@26888c31 +2025-10-29 10:11:50 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.math.BigDecimal -> org.hibernate.type.BasicTypeReference@26888c31 +2025-10-29 10:11:50 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration character -> org.hibernate.type.BasicTypeReference@24010875 +2025-10-29 10:11:50 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration char -> org.hibernate.type.BasicTypeReference@24010875 +2025-10-29 10:11:50 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Character -> org.hibernate.type.BasicTypeReference@24010875 +2025-10-29 10:11:50 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration character_nchar -> org.hibernate.type.BasicTypeReference@7a021f49 +2025-10-29 10:11:50 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration string -> org.hibernate.type.BasicTypeReference@e60c5a +2025-10-29 10:11:50 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.String -> org.hibernate.type.BasicTypeReference@e60c5a +2025-10-29 10:11:50 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration nstring -> org.hibernate.type.BasicTypeReference@626df173 +2025-10-29 10:11:50 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration characters -> org.hibernate.type.BasicTypeReference@4e030feb +2025-10-29 10:11:50 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration char[] -> org.hibernate.type.BasicTypeReference@4e030feb +2025-10-29 10:11:50 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration [C -> org.hibernate.type.BasicTypeReference@4e030feb +2025-10-29 10:11:50 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration wrapper-characters -> org.hibernate.type.BasicTypeReference@2411b935 +2025-10-29 10:11:50 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration text -> org.hibernate.type.BasicTypeReference@1425e531 +2025-10-29 10:11:50 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration ntext -> org.hibernate.type.BasicTypeReference@194e78af +2025-10-29 10:11:50 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration clob -> org.hibernate.type.BasicTypeReference@4fe4503a +2025-10-29 10:11:50 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.sql.Clob -> org.hibernate.type.BasicTypeReference@4fe4503a +2025-10-29 10:11:50 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration nclob -> org.hibernate.type.BasicTypeReference@669580e2 +2025-10-29 10:11:50 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.sql.NClob -> org.hibernate.type.BasicTypeReference@669580e2 +2025-10-29 10:11:50 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration materialized_clob -> org.hibernate.type.BasicTypeReference@5d22ed6c +2025-10-29 10:11:50 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration materialized_clob_char_array -> org.hibernate.type.BasicTypeReference@37c37d67 +2025-10-29 10:11:50 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration materialized_clob_character_array -> org.hibernate.type.BasicTypeReference@5a4b8e25 +2025-10-29 10:11:50 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration materialized_nclob -> org.hibernate.type.BasicTypeReference@1013871e +2025-10-29 10:11:50 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration materialized_nclob_character_array -> org.hibernate.type.BasicTypeReference@5a9051fd +2025-10-29 10:11:50 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration materialized_nclob_char_array -> org.hibernate.type.BasicTypeReference@7614378d +2025-10-29 10:11:50 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration Duration -> org.hibernate.type.BasicTypeReference@7028b5cc +2025-10-29 10:11:50 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.Duration -> org.hibernate.type.BasicTypeReference@7028b5cc +2025-10-29 10:11:50 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration LocalDateTime -> org.hibernate.type.BasicTypeReference@7c0ff7a0 +2025-10-29 10:11:50 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.LocalDateTime -> org.hibernate.type.BasicTypeReference@7c0ff7a0 +2025-10-29 10:11:50 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration LocalDate -> org.hibernate.type.BasicTypeReference@24c84e65 +2025-10-29 10:11:50 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.LocalDate -> org.hibernate.type.BasicTypeReference@24c84e65 +2025-10-29 10:11:50 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration LocalTime -> org.hibernate.type.BasicTypeReference@7337bd2e +2025-10-29 10:11:50 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.LocalTime -> org.hibernate.type.BasicTypeReference@7337bd2e +2025-10-29 10:11:50 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration OffsetDateTime -> org.hibernate.type.BasicTypeReference@4604e051 +2025-10-29 10:11:50 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.OffsetDateTime -> org.hibernate.type.BasicTypeReference@4604e051 +2025-10-29 10:11:50 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration OffsetDateTimeWithTimezone -> org.hibernate.type.BasicTypeReference@4535bdc6 +2025-10-29 10:11:50 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration OffsetDateTimeWithoutTimezone -> org.hibernate.type.BasicTypeReference@23e86863 +2025-10-29 10:11:50 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration OffsetTime -> org.hibernate.type.BasicTypeReference@6df87ffd +2025-10-29 10:11:50 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.OffsetTime -> org.hibernate.type.BasicTypeReference@6df87ffd +2025-10-29 10:11:50 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration OffsetTimeUtc -> org.hibernate.type.BasicTypeReference@c1f0c7b +2025-10-29 10:11:50 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration OffsetTimeWithTimezone -> org.hibernate.type.BasicTypeReference@642c5bb3 +2025-10-29 10:11:50 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration OffsetTimeWithoutTimezone -> org.hibernate.type.BasicTypeReference@4e79c25 +2025-10-29 10:11:50 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration ZonedDateTime -> org.hibernate.type.BasicTypeReference@2ace1cd3 +2025-10-29 10:11:50 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.ZonedDateTime -> org.hibernate.type.BasicTypeReference@2ace1cd3 +2025-10-29 10:11:50 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration ZonedDateTimeWithTimezone -> org.hibernate.type.BasicTypeReference@5e46a125 +2025-10-29 10:11:50 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration ZonedDateTimeWithoutTimezone -> org.hibernate.type.BasicTypeReference@5831989d +2025-10-29 10:11:50 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration date -> org.hibernate.type.BasicTypeReference@608f310a +2025-10-29 10:11:50 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.sql.Date -> org.hibernate.type.BasicTypeReference@608f310a +2025-10-29 10:11:50 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration time -> org.hibernate.type.BasicTypeReference@3a7d914c +2025-10-29 10:11:50 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.sql.Time -> org.hibernate.type.BasicTypeReference@3a7d914c +2025-10-29 10:11:50 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration timestamp -> org.hibernate.type.BasicTypeReference@515940af +2025-10-29 10:11:50 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.sql.Timestamp -> org.hibernate.type.BasicTypeReference@515940af +2025-10-29 10:11:50 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.util.Date -> org.hibernate.type.BasicTypeReference@515940af +2025-10-29 10:11:50 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration calendar -> org.hibernate.type.BasicTypeReference@5f8df69 +2025-10-29 10:11:50 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.util.Calendar -> org.hibernate.type.BasicTypeReference@5f8df69 +2025-10-29 10:11:50 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.util.GregorianCalendar -> org.hibernate.type.BasicTypeReference@5f8df69 +2025-10-29 10:11:50 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration calendar_date -> org.hibernate.type.BasicTypeReference@1ce6a9bd +2025-10-29 10:11:50 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration calendar_time -> org.hibernate.type.BasicTypeReference@4a47bc9c +2025-10-29 10:11:50 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration instant -> org.hibernate.type.BasicTypeReference@5100c143 +2025-10-29 10:11:50 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.Instant -> org.hibernate.type.BasicTypeReference@5100c143 +2025-10-29 10:11:50 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration uuid -> org.hibernate.type.BasicTypeReference@12404f9d +2025-10-29 10:11:50 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.util.UUID -> org.hibernate.type.BasicTypeReference@12404f9d +2025-10-29 10:11:50 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration pg-uuid -> org.hibernate.type.BasicTypeReference@12404f9d +2025-10-29 10:11:50 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration uuid-binary -> org.hibernate.type.BasicTypeReference@3b42b729 +2025-10-29 10:11:50 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration uuid-char -> org.hibernate.type.BasicTypeReference@4c164f81 +2025-10-29 10:11:50 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration class -> org.hibernate.type.BasicTypeReference@1bcb8599 +2025-10-29 10:11:50 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Class -> org.hibernate.type.BasicTypeReference@1bcb8599 +2025-10-29 10:11:50 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration currency -> org.hibernate.type.BasicTypeReference@b671dda +2025-10-29 10:11:50 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration Currency -> org.hibernate.type.BasicTypeReference@b671dda +2025-10-29 10:11:50 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.util.Currency -> org.hibernate.type.BasicTypeReference@b671dda +2025-10-29 10:11:50 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration locale -> org.hibernate.type.BasicTypeReference@25b20860 +2025-10-29 10:11:50 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.util.Locale -> org.hibernate.type.BasicTypeReference@25b20860 +2025-10-29 10:11:50 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration serializable -> org.hibernate.type.BasicTypeReference@5ba63110 +2025-10-29 10:11:50 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.io.Serializable -> org.hibernate.type.BasicTypeReference@5ba63110 +2025-10-29 10:11:50 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration timezone -> org.hibernate.type.BasicTypeReference@1c0680b0 +2025-10-29 10:11:50 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.util.TimeZone -> org.hibernate.type.BasicTypeReference@1c0680b0 +2025-10-29 10:11:50 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration ZoneOffset -> org.hibernate.type.BasicTypeReference@2f3cd727 +2025-10-29 10:11:50 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.ZoneOffset -> org.hibernate.type.BasicTypeReference@2f3cd727 +2025-10-29 10:11:50 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration url -> org.hibernate.type.BasicTypeReference@1af82ba8 +2025-10-29 10:11:50 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.net.URL -> org.hibernate.type.BasicTypeReference@1af82ba8 +2025-10-29 10:11:50 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration vector -> org.hibernate.type.BasicTypeReference@703cb756 +2025-10-29 10:11:50 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration row_version -> org.hibernate.type.BasicTypeReference@5897aae1 +2025-10-29 10:11:50 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration object -> org.hibernate.type.JavaObjectType@4e357792 +2025-10-29 10:11:50 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Object -> org.hibernate.type.JavaObjectType@4e357792 +2025-10-29 10:11:50 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration null -> org.hibernate.type.NullType@4ebed2b3 +2025-10-29 10:11:50 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration imm_date -> org.hibernate.type.BasicTypeReference@11069eac +2025-10-29 10:11:50 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration imm_time -> org.hibernate.type.BasicTypeReference@2059f785 +2025-10-29 10:11:50 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration imm_timestamp -> org.hibernate.type.BasicTypeReference@18ca9277 +2025-10-29 10:11:50 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration imm_calendar -> org.hibernate.type.BasicTypeReference@3d9c8c3c +2025-10-29 10:11:50 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration imm_calendar_date -> org.hibernate.type.BasicTypeReference@2dc73024 +2025-10-29 10:11:50 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration imm_calendar_time -> org.hibernate.type.BasicTypeReference@42cd0fc6 +2025-10-29 10:11:50 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration imm_binary -> org.hibernate.type.BasicTypeReference@e5864c2 +2025-10-29 10:11:50 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration imm_serializable -> org.hibernate.type.BasicTypeReference@577cf459 +2025-10-29 10:11:50 [main] INFO o.s.o.j.p.SpringPersistenceUnitInfo - No LoadTimeWeaver setup: ignoring JPA class transformer +2025-10-29 10:11:50 [main] INFO com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Starting... +2025-10-29 10:11:50 [main] INFO com.zaxxer.hikari.pool.HikariPool - HikariPool-1 - Added connection org.postgresql.jdbc.PgConnection@7c37ac3c +2025-10-29 10:11:50 [main] INFO com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Start completed. +2025-10-29 10:11:50 [main] WARN org.hibernate.orm.deprecation - HHH90000025: PostgreSQLDialect does not need to be specified explicitly using 'hibernate.dialect' (remove the property setting and it will be selected by default) +2025-10-29 10:11:50 [main] DEBUG o.h.t.d.sql.spi.DdlTypeRegistry - addDescriptor(2003, org.hibernate.type.descriptor.sql.internal.ArrayDdlTypeImpl@2f4fc18) replaced previous registration(org.hibernate.type.descriptor.sql.internal.ArrayDdlTypeImpl@7187078a) +2025-10-29 10:11:50 [main] DEBUG o.h.t.d.sql.spi.DdlTypeRegistry - addDescriptor(6, org.hibernate.type.descriptor.sql.internal.CapacityDependentDdlType@6e612122) replaced previous registration(org.hibernate.type.descriptor.sql.internal.DdlTypeImpl@1d38cdde) +2025-10-29 10:11:50 [main] DEBUG o.h.t.d.jdbc.spi.JdbcTypeRegistry - addDescriptor(2004, BlobTypeDescriptor(BLOB_BINDING)) replaced previous registration(BlobTypeDescriptor(DEFAULT)) +2025-10-29 10:11:50 [main] DEBUG o.h.t.d.jdbc.spi.JdbcTypeRegistry - addDescriptor(2005, ClobTypeDescriptor(CLOB_BINDING)) replaced previous registration(ClobTypeDescriptor(DEFAULT)) +2025-10-29 10:11:50 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration JAVA_OBJECT -> org.hibernate.type.JavaObjectType@498b697 +2025-10-29 10:11:50 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Object -> org.hibernate.type.JavaObjectType@498b697 +2025-10-29 10:11:50 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Type registration key [java.lang.Object] overrode previous entry : `org.hibernate.type.JavaObjectType@4e357792` +2025-10-29 10:11:50 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration org.hibernate.type.DurationType -> basicType@1(java.time.Duration,3015) +2025-10-29 10:11:50 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration Duration -> basicType@1(java.time.Duration,3015) +2025-10-29 10:11:50 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.Duration -> basicType@1(java.time.Duration,3015) +2025-10-29 10:11:50 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration org.hibernate.type.OffsetDateTimeType -> basicType@2(java.time.OffsetDateTime,3003) +2025-10-29 10:11:50 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration OffsetDateTime -> basicType@2(java.time.OffsetDateTime,3003) +2025-10-29 10:11:50 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.OffsetDateTime -> basicType@2(java.time.OffsetDateTime,3003) +2025-10-29 10:11:50 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration org.hibernate.type.ZonedDateTimeType -> basicType@3(java.time.ZonedDateTime,3003) +2025-10-29 10:11:50 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration ZonedDateTime -> basicType@3(java.time.ZonedDateTime,3003) +2025-10-29 10:11:50 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.ZonedDateTime -> basicType@3(java.time.ZonedDateTime,3003) +2025-10-29 10:11:50 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration org.hibernate.type.OffsetTimeType -> basicType@4(java.time.OffsetTime,3007) +2025-10-29 10:11:50 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration OffsetTime -> basicType@4(java.time.OffsetTime,3007) +2025-10-29 10:11:50 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.OffsetTime -> basicType@4(java.time.OffsetTime,3007) +2025-10-29 10:11:50 [main] DEBUG o.h.type.spi.TypeConfiguration$Scope - Scoping TypeConfiguration [org.hibernate.type.spi.TypeConfiguration@48788853] to MetadataBuildingContext [org.hibernate.boot.internal.MetadataBuildingContextRootImpl@4ac77269] +2025-10-29 10:11:50 [main] INFO o.h.e.t.j.p.i.JtaPlatformInitiator - HHH000489: No JTA platform available (set 'hibernate.transaction.jta.platform' to enable JTA platform integration) +2025-10-29 10:11:50 [main] DEBUG o.h.type.spi.TypeConfiguration$Scope - Scoping TypeConfiguration [org.hibernate.type.spi.TypeConfiguration@48788853] to SessionFactoryImplementor [org.hibernate.internal.SessionFactoryImpl@21b75073] +2025-10-29 10:11:50 [main] DEBUG org.hibernate.SQL - + alter table if exists transcript_segments + alter column text set data type TEXT +2025-10-29 10:11:50 [main] DEBUG org.hibernate.SQL - + alter table if exists transcriptions + alter column full_text set data type TEXT +2025-10-29 10:11:50 [main] TRACE o.h.type.spi.TypeConfiguration$Scope - Handling #sessionFactoryCreated from [org.hibernate.internal.SessionFactoryImpl@21b75073] for TypeConfiguration +2025-10-29 10:11:50 [main] INFO o.s.o.j.LocalContainerEntityManagerFactoryBean - Initialized JPA EntityManagerFactory for persistence unit 'default' +2025-10-29 10:11:50 [main] ERROR i.n.r.d.DnsServerAddressStreamProviders - Unable to load io.netty.resolver.dns.macos.MacOSDnsServerAddressStreamProvider, fallback to system defaults. This may result in incorrect DNS resolutions on MacOS. Check whether you have a dependency on 'io.netty:netty-resolver-dns-native-macos'. Use DEBUG level to see the full stack: java.lang.UnsatisfiedLinkError: failed to load the required native library +2025-10-29 10:11:51 [main] INFO o.s.d.j.r.query.QueryEnhancerFactory - Hibernate is in classpath; If applicable, HQL parser will be used. +2025-10-29 10:11:51 [main] WARN c.u.h.stt.service.AzureSpeechService - Azure Speech Subscription Key 미설정 - 시뮬레이션 모드로 실행 +2025-10-29 10:11:51 [main] WARN o.s.b.a.o.j.JpaBaseConfiguration$JpaWebConfiguration - spring.jpa.open-in-view is enabled by default. Therefore, database queries may be performed during view rendering. Explicitly configure spring.jpa.open-in-view to disable this warning +2025-10-29 10:11:51 [main] WARN o.s.b.a.s.s.UserDetailsServiceAutoConfiguration - + +Using generated security password: e40f0af3-5d1e-4649-84a6-4beaf1d39f31 + +This generated password is for development use only. Your security configuration must be updated before running your application in production. + +2025-10-29 10:11:51 [main] INFO o.s.s.c.a.a.c.InitializeUserDetailsBeanManagerConfigurer$InitializeUserDetailsManagerConfigurer - Global AuthenticationManager configured with UserDetailsService bean with name inMemoryUserDetailsManager +2025-10-29 10:11:51 [main] INFO o.s.b.a.e.web.EndpointLinksResolver - Exposing 3 endpoints beneath base path '/actuator' +2025-10-29 10:11:51 [main] INFO o.s.b.w.e.tomcat.TomcatWebServer - Tomcat started on port 8084 (http) with context path '/' +2025-10-29 10:11:51 [main] INFO c.unicorn.hgzero.stt.SttApplication - Started SttApplication in 2.524 seconds (process running for 2.639) +2025-10-29 10:12:01 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:12:02 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - 오디오 청크 없음 - meetingId: test-meeting-001 +2025-10-29 10:12:02 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:12:07 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:12:07 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - 오디오 청크 없음 - meetingId: test-meeting-001 +2025-10-29 10:12:07 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:12:12 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:12:12 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - 오디오 청크 없음 - meetingId: test-meeting-001 +2025-10-29 10:12:12 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:12:17 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:12:17 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - 오디오 청크 없음 - meetingId: test-meeting-001 +2025-10-29 10:12:17 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:12:22 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:12:22 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - 오디오 청크 없음 - meetingId: test-meeting-001 +2025-10-29 10:12:22 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:12:27 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:12:27 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - 오디오 청크 없음 - meetingId: test-meeting-001 +2025-10-29 10:12:27 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:12:32 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:12:32 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - 오디오 청크 없음 - meetingId: test-meeting-001 +2025-10-29 10:12:32 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:12:37 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:12:37 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - 오디오 청크 없음 - meetingId: test-meeting-001 +2025-10-29 10:12:37 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:12:42 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:12:42 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - 오디오 청크 없음 - meetingId: test-meeting-001 +2025-10-29 10:12:42 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:12:47 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:12:47 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - 오디오 청크 없음 - meetingId: test-meeting-001 +2025-10-29 10:12:47 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:12:52 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:12:52 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - 오디오 청크 없음 - meetingId: test-meeting-001 +2025-10-29 10:12:52 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:12:57 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:12:57 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - 오디오 청크 없음 - meetingId: test-meeting-001 +2025-10-29 10:12:57 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:13:02 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:13:02 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - 오디오 청크 없음 - meetingId: test-meeting-001 +2025-10-29 10:13:02 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:13:07 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:13:07 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - 오디오 청크 없음 - meetingId: test-meeting-001 +2025-10-29 10:13:07 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:13:12 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:13:12 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - 오디오 청크 없음 - meetingId: test-meeting-001 +2025-10-29 10:13:12 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:13:17 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:13:17 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - 오디오 청크 없음 - meetingId: test-meeting-001 +2025-10-29 10:13:17 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:13:22 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:13:22 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - 오디오 청크 없음 - meetingId: test-meeting-001 +2025-10-29 10:13:22 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:13:27 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:13:27 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - 오디오 청크 없음 - meetingId: test-meeting-001 +2025-10-29 10:13:27 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:13:32 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:13:32 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - 오디오 청크 없음 - meetingId: test-meeting-001 +2025-10-29 10:13:32 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:13:37 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:13:37 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - 오디오 청크 없음 - meetingId: test-meeting-001 +2025-10-29 10:13:37 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:13:42 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:13:42 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - 오디오 청크 없음 - meetingId: test-meeting-001 +2025-10-29 10:13:42 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:13:47 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:13:47 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - 오디오 청크 없음 - meetingId: test-meeting-001 +2025-10-29 10:13:47 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:13:52 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:13:52 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - 오디오 청크 없음 - meetingId: test-meeting-001 +2025-10-29 10:13:52 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:13:57 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:13:57 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - 오디오 청크 없음 - meetingId: test-meeting-001 +2025-10-29 10:13:57 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:14:02 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:14:02 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - 오디오 청크 없음 - meetingId: test-meeting-001 +2025-10-29 10:14:02 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:14:07 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:14:07 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - 오디오 청크 없음 - meetingId: test-meeting-001 +2025-10-29 10:14:07 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:14:12 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:14:12 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - 오디오 청크 없음 - meetingId: test-meeting-001 +2025-10-29 10:14:12 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:14:17 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:14:17 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - 오디오 청크 없음 - meetingId: test-meeting-001 +2025-10-29 10:14:17 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:14:23 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:14:23 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - 오디오 청크 없음 - meetingId: test-meeting-001 +2025-10-29 10:14:23 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:14:28 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:14:28 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - 오디오 청크 없음 - meetingId: test-meeting-001 +2025-10-29 10:14:28 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:14:33 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:14:33 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - 오디오 청크 없음 - meetingId: test-meeting-001 +2025-10-29 10:14:33 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:14:38 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:14:38 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - 오디오 청크 없음 - meetingId: test-meeting-001 +2025-10-29 10:14:38 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:14:43 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:14:43 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - 오디오 청크 없음 - meetingId: test-meeting-001 +2025-10-29 10:14:43 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:14:48 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:14:48 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - 오디오 청크 없음 - meetingId: test-meeting-001 +2025-10-29 10:14:48 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:14:53 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:14:53 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - 오디오 청크 없음 - meetingId: test-meeting-001 +2025-10-29 10:14:53 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:14:58 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:14:58 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - 오디오 청크 없음 - meetingId: test-meeting-001 +2025-10-29 10:14:58 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:15:03 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:15:03 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - 오디오 청크 없음 - meetingId: test-meeting-001 +2025-10-29 10:15:03 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:15:08 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:15:08 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - 오디오 청크 없음 - meetingId: test-meeting-001 +2025-10-29 10:15:08 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:15:13 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:15:14 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - 오디오 청크 없음 - meetingId: test-meeting-001 +2025-10-29 10:15:14 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:15:19 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:15:19 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - 오디오 청크 없음 - meetingId: test-meeting-001 +2025-10-29 10:15:19 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:15:24 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:15:24 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - 오디오 청크 없음 - meetingId: test-meeting-001 +2025-10-29 10:15:24 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:15:29 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:15:29 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - 오디오 청크 없음 - meetingId: test-meeting-001 +2025-10-29 10:15:29 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:15:34 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:15:34 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - 오디오 청크 없음 - meetingId: test-meeting-001 +2025-10-29 10:15:34 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:15:39 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:15:39 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - 오디오 청크 없음 - meetingId: test-meeting-001 +2025-10-29 10:15:39 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:15:44 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:15:44 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - 오디오 청크 없음 - meetingId: test-meeting-001 +2025-10-29 10:15:44 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:15:49 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:15:49 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - 오디오 청크 없음 - meetingId: test-meeting-001 +2025-10-29 10:15:49 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:15:54 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:15:54 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - 오디오 청크 없음 - meetingId: test-meeting-001 +2025-10-29 10:15:54 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:15:59 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:15:59 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - 오디오 청크 없음 - meetingId: test-meeting-001 +2025-10-29 10:15:59 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:16:04 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:16:04 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - 오디오 청크 없음 - meetingId: test-meeting-001 +2025-10-29 10:16:04 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:16:09 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:16:09 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - 오디오 청크 없음 - meetingId: test-meeting-001 +2025-10-29 10:16:09 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:16:15 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:16:15 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - 오디오 청크 없음 - meetingId: test-meeting-001 +2025-10-29 10:16:15 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:16:20 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:16:20 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - 오디오 청크 없음 - meetingId: test-meeting-001 +2025-10-29 10:16:20 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:16:25 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:16:25 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - 오디오 청크 없음 - meetingId: test-meeting-001 +2025-10-29 10:16:25 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:16:30 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:16:30 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - 오디오 청크 없음 - meetingId: test-meeting-001 +2025-10-29 10:16:30 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:16:35 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:16:35 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - 오디오 청크 없음 - meetingId: test-meeting-001 +2025-10-29 10:16:35 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:16:40 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:16:40 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - 오디오 청크 없음 - meetingId: test-meeting-001 +2025-10-29 10:16:40 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:16:45 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:16:45 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - 오디오 청크 없음 - meetingId: test-meeting-001 +2025-10-29 10:16:45 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:16:50 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:16:50 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - 오디오 청크 없음 - meetingId: test-meeting-001 +2025-10-29 10:16:50 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:16:55 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:16:55 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - 오디오 청크 없음 - meetingId: test-meeting-001 +2025-10-29 10:16:55 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:17:00 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:17:00 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - 오디오 청크 없음 - meetingId: test-meeting-001 +2025-10-29 10:17:00 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:17:05 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:17:05 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - 오디오 청크 없음 - meetingId: test-meeting-001 +2025-10-29 10:17:05 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:17:10 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:17:10 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - 오디오 청크 없음 - meetingId: test-meeting-001 +2025-10-29 10:17:10 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:17:15 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:17:15 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - 오디오 청크 없음 - meetingId: test-meeting-001 +2025-10-29 10:17:15 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:17:20 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:17:20 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - 오디오 청크 없음 - meetingId: test-meeting-001 +2025-10-29 10:17:20 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:17:25 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:17:25 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - 오디오 청크 없음 - meetingId: test-meeting-001 +2025-10-29 10:17:25 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:17:30 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:17:30 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - 오디오 청크 없음 - meetingId: test-meeting-001 +2025-10-29 10:17:30 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:17:35 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:17:35 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - 오디오 청크 없음 - meetingId: test-meeting-001 +2025-10-29 10:17:35 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:17:40 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:17:40 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - 오디오 청크 없음 - meetingId: test-meeting-001 +2025-10-29 10:17:40 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:17:45 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:17:45 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - 오디오 청크 없음 - meetingId: test-meeting-001 +2025-10-29 10:17:45 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:17:50 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:17:50 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - 오디오 청크 없음 - meetingId: test-meeting-001 +2025-10-29 10:17:50 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:17:55 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:17:55 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - 오디오 청크 없음 - meetingId: test-meeting-001 +2025-10-29 10:17:55 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:18:00 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:18:00 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - 오디오 청크 없음 - meetingId: test-meeting-001 +2025-10-29 10:18:00 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:18:05 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:18:05 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - 오디오 청크 없음 - meetingId: test-meeting-001 +2025-10-29 10:18:05 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:18:10 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:18:10 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - 오디오 청크 없음 - meetingId: test-meeting-001 +2025-10-29 10:18:10 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:18:15 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:18:15 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - 오디오 청크 없음 - meetingId: test-meeting-001 +2025-10-29 10:18:15 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:18:20 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:18:20 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - 오디오 청크 없음 - meetingId: test-meeting-001 +2025-10-29 10:18:20 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:18:26 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:18:26 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - 오디오 청크 없음 - meetingId: test-meeting-001 +2025-10-29 10:18:26 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:18:31 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:18:31 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - 오디오 청크 없음 - meetingId: test-meeting-001 +2025-10-29 10:18:31 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:18:36 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:18:36 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - 오디오 청크 없음 - meetingId: test-meeting-001 +2025-10-29 10:18:36 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:18:41 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:18:41 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - 오디오 청크 없음 - meetingId: test-meeting-001 +2025-10-29 10:18:41 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:18:46 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:18:46 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - 오디오 청크 없음 - meetingId: test-meeting-001 +2025-10-29 10:18:46 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:18:51 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:18:51 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - 오디오 청크 없음 - meetingId: test-meeting-001 +2025-10-29 10:18:51 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:18:54 [SpringApplicationShutdownHook] INFO o.s.o.j.LocalContainerEntityManagerFactoryBean - Closing JPA EntityManagerFactory for persistence unit 'default' +2025-10-29 10:18:54 [SpringApplicationShutdownHook] TRACE o.h.type.spi.TypeConfiguration$Scope - Handling #sessionFactoryClosed from [org.hibernate.internal.SessionFactoryImpl@21b75073] for TypeConfiguration +2025-10-29 10:18:54 [SpringApplicationShutdownHook] DEBUG o.h.type.spi.TypeConfiguration$Scope - Un-scoping TypeConfiguration [org.hibernate.type.spi.TypeConfiguration$Scope@4175c2fb] from SessionFactory [org.hibernate.internal.SessionFactoryImpl@21b75073] +2025-10-29 10:18:54 [SpringApplicationShutdownHook] INFO com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Shutdown initiated... +2025-10-29 10:18:54 [SpringApplicationShutdownHook] INFO com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Shutdown completed. +2025-10-29 10:19:43 [main] INFO c.unicorn.hgzero.stt.SttApplication - Starting SttApplication using Java 23.0.2 with PID 51575 (/Users/jominseo/HGZero/stt/build/classes/java/main started by jominseo in /Users/jominseo/HGZero/stt) +2025-10-29 10:19:43 [main] DEBUG c.unicorn.hgzero.stt.SttApplication - Running with Spring Boot v3.3.5, Spring v6.1.14 +2025-10-29 10:19:43 [main] INFO c.unicorn.hgzero.stt.SttApplication - No active profile set, falling back to 1 default profile: "default" +2025-10-29 10:19:43 [main] INFO o.s.d.r.c.RepositoryConfigurationDelegate - Multiple Spring Data modules found, entering strict repository configuration mode +2025-10-29 10:19:43 [main] INFO o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data JPA repositories in DEFAULT mode. +2025-10-29 10:19:43 [main] INFO o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 37 ms. Found 3 JPA repository interfaces. +2025-10-29 10:19:43 [main] INFO o.s.d.r.c.RepositoryConfigurationDelegate - Multiple Spring Data modules found, entering strict repository configuration mode +2025-10-29 10:19:43 [main] INFO o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data Redis repositories in DEFAULT mode. +2025-10-29 10:19:43 [main] INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.unicorn.hgzero.stt.repository.jpa.RecordingRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-10-29 10:19:43 [main] INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.unicorn.hgzero.stt.repository.jpa.TranscriptSegmentRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-10-29 10:19:43 [main] INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.unicorn.hgzero.stt.repository.jpa.TranscriptionRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-10-29 10:19:43 [main] INFO o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 5 ms. Found 0 Redis repository interfaces. +2025-10-29 10:19:43 [main] INFO o.s.b.w.e.tomcat.TomcatWebServer - Tomcat initialized with port 8084 (http) +2025-10-29 10:19:43 [main] INFO o.a.catalina.core.StandardService - Starting service [Tomcat] +2025-10-29 10:19:43 [main] INFO o.a.catalina.core.StandardEngine - Starting Servlet engine: [Apache Tomcat/10.1.31] +2025-10-29 10:19:43 [main] INFO o.a.c.c.C.[Tomcat].[localhost].[/] - Initializing Spring embedded WebApplicationContext +2025-10-29 10:19:43 [main] INFO o.s.b.w.s.c.ServletWebServerApplicationContext - Root WebApplicationContext: initialization completed in 637 ms +2025-10-29 10:19:43 [main] INFO o.h.jpa.internal.util.LogHelper - HHH000204: Processing PersistenceUnitInfo [name: default] +2025-10-29 10:19:43 [main] INFO org.hibernate.Version - HHH000412: Hibernate ORM core version 6.5.3.Final +2025-10-29 10:19:43 [main] INFO o.h.c.i.RegionFactoryInitiator - HHH000026: Second-level cache disabled +2025-10-29 10:19:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration boolean -> org.hibernate.type.BasicTypeReference@79135a38 +2025-10-29 10:19:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration boolean -> org.hibernate.type.BasicTypeReference@79135a38 +2025-10-29 10:19:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Boolean -> org.hibernate.type.BasicTypeReference@79135a38 +2025-10-29 10:19:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration numeric_boolean -> org.hibernate.type.BasicTypeReference@77fceac6 +2025-10-29 10:19:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration org.hibernate.type.NumericBooleanConverter -> org.hibernate.type.BasicTypeReference@77fceac6 +2025-10-29 10:19:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration true_false -> org.hibernate.type.BasicTypeReference@563c3aca +2025-10-29 10:19:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration org.hibernate.type.TrueFalseConverter -> org.hibernate.type.BasicTypeReference@563c3aca +2025-10-29 10:19:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration yes_no -> org.hibernate.type.BasicTypeReference@53e166ad +2025-10-29 10:19:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration org.hibernate.type.YesNoConverter -> org.hibernate.type.BasicTypeReference@53e166ad +2025-10-29 10:19:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration byte -> org.hibernate.type.BasicTypeReference@30c03473 +2025-10-29 10:19:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration byte -> org.hibernate.type.BasicTypeReference@30c03473 +2025-10-29 10:19:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Byte -> org.hibernate.type.BasicTypeReference@30c03473 +2025-10-29 10:19:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration binary -> org.hibernate.type.BasicTypeReference@20fa5277 +2025-10-29 10:19:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration byte[] -> org.hibernate.type.BasicTypeReference@20fa5277 +2025-10-29 10:19:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration [B -> org.hibernate.type.BasicTypeReference@20fa5277 +2025-10-29 10:19:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration binary_wrapper -> org.hibernate.type.BasicTypeReference@17a7d6c8 +2025-10-29 10:19:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration wrapper-binary -> org.hibernate.type.BasicTypeReference@17a7d6c8 +2025-10-29 10:19:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration image -> org.hibernate.type.BasicTypeReference@4f2b1e9f +2025-10-29 10:19:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration blob -> org.hibernate.type.BasicTypeReference@7ef9c8a5 +2025-10-29 10:19:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.sql.Blob -> org.hibernate.type.BasicTypeReference@7ef9c8a5 +2025-10-29 10:19:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration materialized_blob -> org.hibernate.type.BasicTypeReference@c6244e7 +2025-10-29 10:19:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration materialized_blob_wrapper -> org.hibernate.type.BasicTypeReference@25dad235 +2025-10-29 10:19:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration short -> org.hibernate.type.BasicTypeReference@3292eff7 +2025-10-29 10:19:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration short -> org.hibernate.type.BasicTypeReference@3292eff7 +2025-10-29 10:19:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Short -> org.hibernate.type.BasicTypeReference@3292eff7 +2025-10-29 10:19:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration integer -> org.hibernate.type.BasicTypeReference@29ea5e0 +2025-10-29 10:19:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration int -> org.hibernate.type.BasicTypeReference@29ea5e0 +2025-10-29 10:19:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Integer -> org.hibernate.type.BasicTypeReference@29ea5e0 +2025-10-29 10:19:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration long -> org.hibernate.type.BasicTypeReference@1c459c28 +2025-10-29 10:19:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration long -> org.hibernate.type.BasicTypeReference@1c459c28 +2025-10-29 10:19:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Long -> org.hibernate.type.BasicTypeReference@1c459c28 +2025-10-29 10:19:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration float -> org.hibernate.type.BasicTypeReference@6ffdbeef +2025-10-29 10:19:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration float -> org.hibernate.type.BasicTypeReference@6ffdbeef +2025-10-29 10:19:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Float -> org.hibernate.type.BasicTypeReference@6ffdbeef +2025-10-29 10:19:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration double -> org.hibernate.type.BasicTypeReference@4a3509b0 +2025-10-29 10:19:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration double -> org.hibernate.type.BasicTypeReference@4a3509b0 +2025-10-29 10:19:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Double -> org.hibernate.type.BasicTypeReference@4a3509b0 +2025-10-29 10:19:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration big_integer -> org.hibernate.type.BasicTypeReference@3d7314b3 +2025-10-29 10:19:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.math.BigInteger -> org.hibernate.type.BasicTypeReference@3d7314b3 +2025-10-29 10:19:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration big_decimal -> org.hibernate.type.BasicTypeReference@d677be9 +2025-10-29 10:19:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.math.BigDecimal -> org.hibernate.type.BasicTypeReference@d677be9 +2025-10-29 10:19:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration character -> org.hibernate.type.BasicTypeReference@fefb66c +2025-10-29 10:19:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration char -> org.hibernate.type.BasicTypeReference@fefb66c +2025-10-29 10:19:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Character -> org.hibernate.type.BasicTypeReference@fefb66c +2025-10-29 10:19:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration character_nchar -> org.hibernate.type.BasicTypeReference@6d7556a8 +2025-10-29 10:19:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration string -> org.hibernate.type.BasicTypeReference@48860139 +2025-10-29 10:19:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.String -> org.hibernate.type.BasicTypeReference@48860139 +2025-10-29 10:19:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration nstring -> org.hibernate.type.BasicTypeReference@7e0883f3 +2025-10-29 10:19:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration characters -> org.hibernate.type.BasicTypeReference@ca60688 +2025-10-29 10:19:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration char[] -> org.hibernate.type.BasicTypeReference@ca60688 +2025-10-29 10:19:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration [C -> org.hibernate.type.BasicTypeReference@ca60688 +2025-10-29 10:19:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration wrapper-characters -> org.hibernate.type.BasicTypeReference@4ba1c1a2 +2025-10-29 10:19:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration text -> org.hibernate.type.BasicTypeReference@33568e26 +2025-10-29 10:19:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration ntext -> org.hibernate.type.BasicTypeReference@97b84a4 +2025-10-29 10:19:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration clob -> org.hibernate.type.BasicTypeReference@35555145 +2025-10-29 10:19:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.sql.Clob -> org.hibernate.type.BasicTypeReference@35555145 +2025-10-29 10:19:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration nclob -> org.hibernate.type.BasicTypeReference@70bc3a9c +2025-10-29 10:19:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.sql.NClob -> org.hibernate.type.BasicTypeReference@70bc3a9c +2025-10-29 10:19:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration materialized_clob -> org.hibernate.type.BasicTypeReference@771cbd13 +2025-10-29 10:19:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration materialized_clob_char_array -> org.hibernate.type.BasicTypeReference@229749f0 +2025-10-29 10:19:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration materialized_clob_character_array -> org.hibernate.type.BasicTypeReference@3d57fb9e +2025-10-29 10:19:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration materialized_nclob -> org.hibernate.type.BasicTypeReference@2c2e5e72 +2025-10-29 10:19:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration materialized_nclob_character_array -> org.hibernate.type.BasicTypeReference@3e489ac1 +2025-10-29 10:19:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration materialized_nclob_char_array -> org.hibernate.type.BasicTypeReference@26888c31 +2025-10-29 10:19:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration Duration -> org.hibernate.type.BasicTypeReference@24010875 +2025-10-29 10:19:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.Duration -> org.hibernate.type.BasicTypeReference@24010875 +2025-10-29 10:19:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration LocalDateTime -> org.hibernate.type.BasicTypeReference@7a021f49 +2025-10-29 10:19:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.LocalDateTime -> org.hibernate.type.BasicTypeReference@7a021f49 +2025-10-29 10:19:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration LocalDate -> org.hibernate.type.BasicTypeReference@e60c5a +2025-10-29 10:19:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.LocalDate -> org.hibernate.type.BasicTypeReference@e60c5a +2025-10-29 10:19:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration LocalTime -> org.hibernate.type.BasicTypeReference@626df173 +2025-10-29 10:19:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.LocalTime -> org.hibernate.type.BasicTypeReference@626df173 +2025-10-29 10:19:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration OffsetDateTime -> org.hibernate.type.BasicTypeReference@4e030feb +2025-10-29 10:19:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.OffsetDateTime -> org.hibernate.type.BasicTypeReference@4e030feb +2025-10-29 10:19:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration OffsetDateTimeWithTimezone -> org.hibernate.type.BasicTypeReference@2411b935 +2025-10-29 10:19:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration OffsetDateTimeWithoutTimezone -> org.hibernate.type.BasicTypeReference@1425e531 +2025-10-29 10:19:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration OffsetTime -> org.hibernate.type.BasicTypeReference@194e78af +2025-10-29 10:19:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.OffsetTime -> org.hibernate.type.BasicTypeReference@194e78af +2025-10-29 10:19:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration OffsetTimeUtc -> org.hibernate.type.BasicTypeReference@4fe4503a +2025-10-29 10:19:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration OffsetTimeWithTimezone -> org.hibernate.type.BasicTypeReference@669580e2 +2025-10-29 10:19:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration OffsetTimeWithoutTimezone -> org.hibernate.type.BasicTypeReference@5d22ed6c +2025-10-29 10:19:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration ZonedDateTime -> org.hibernate.type.BasicTypeReference@37c37d67 +2025-10-29 10:19:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.ZonedDateTime -> org.hibernate.type.BasicTypeReference@37c37d67 +2025-10-29 10:19:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration ZonedDateTimeWithTimezone -> org.hibernate.type.BasicTypeReference@5a4b8e25 +2025-10-29 10:19:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration ZonedDateTimeWithoutTimezone -> org.hibernate.type.BasicTypeReference@1013871e +2025-10-29 10:19:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration date -> org.hibernate.type.BasicTypeReference@5a9051fd +2025-10-29 10:19:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.sql.Date -> org.hibernate.type.BasicTypeReference@5a9051fd +2025-10-29 10:19:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration time -> org.hibernate.type.BasicTypeReference@7614378d +2025-10-29 10:19:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.sql.Time -> org.hibernate.type.BasicTypeReference@7614378d +2025-10-29 10:19:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration timestamp -> org.hibernate.type.BasicTypeReference@7028b5cc +2025-10-29 10:19:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.sql.Timestamp -> org.hibernate.type.BasicTypeReference@7028b5cc +2025-10-29 10:19:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.util.Date -> org.hibernate.type.BasicTypeReference@7028b5cc +2025-10-29 10:19:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration calendar -> org.hibernate.type.BasicTypeReference@7c0ff7a0 +2025-10-29 10:19:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.util.Calendar -> org.hibernate.type.BasicTypeReference@7c0ff7a0 +2025-10-29 10:19:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.util.GregorianCalendar -> org.hibernate.type.BasicTypeReference@7c0ff7a0 +2025-10-29 10:19:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration calendar_date -> org.hibernate.type.BasicTypeReference@24c84e65 +2025-10-29 10:19:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration calendar_time -> org.hibernate.type.BasicTypeReference@7337bd2e +2025-10-29 10:19:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration instant -> org.hibernate.type.BasicTypeReference@4604e051 +2025-10-29 10:19:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.Instant -> org.hibernate.type.BasicTypeReference@4604e051 +2025-10-29 10:19:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration uuid -> org.hibernate.type.BasicTypeReference@4535bdc6 +2025-10-29 10:19:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.util.UUID -> org.hibernate.type.BasicTypeReference@4535bdc6 +2025-10-29 10:19:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration pg-uuid -> org.hibernate.type.BasicTypeReference@4535bdc6 +2025-10-29 10:19:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration uuid-binary -> org.hibernate.type.BasicTypeReference@23e86863 +2025-10-29 10:19:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration uuid-char -> org.hibernate.type.BasicTypeReference@6df87ffd +2025-10-29 10:19:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration class -> org.hibernate.type.BasicTypeReference@c1f0c7b +2025-10-29 10:19:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Class -> org.hibernate.type.BasicTypeReference@c1f0c7b +2025-10-29 10:19:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration currency -> org.hibernate.type.BasicTypeReference@642c5bb3 +2025-10-29 10:19:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration Currency -> org.hibernate.type.BasicTypeReference@642c5bb3 +2025-10-29 10:19:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.util.Currency -> org.hibernate.type.BasicTypeReference@642c5bb3 +2025-10-29 10:19:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration locale -> org.hibernate.type.BasicTypeReference@4e79c25 +2025-10-29 10:19:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.util.Locale -> org.hibernate.type.BasicTypeReference@4e79c25 +2025-10-29 10:19:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration serializable -> org.hibernate.type.BasicTypeReference@2ace1cd3 +2025-10-29 10:19:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.io.Serializable -> org.hibernate.type.BasicTypeReference@2ace1cd3 +2025-10-29 10:19:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration timezone -> org.hibernate.type.BasicTypeReference@5e46a125 +2025-10-29 10:19:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.util.TimeZone -> org.hibernate.type.BasicTypeReference@5e46a125 +2025-10-29 10:19:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration ZoneOffset -> org.hibernate.type.BasicTypeReference@5831989d +2025-10-29 10:19:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.ZoneOffset -> org.hibernate.type.BasicTypeReference@5831989d +2025-10-29 10:19:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration url -> org.hibernate.type.BasicTypeReference@608f310a +2025-10-29 10:19:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.net.URL -> org.hibernate.type.BasicTypeReference@608f310a +2025-10-29 10:19:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration vector -> org.hibernate.type.BasicTypeReference@3a7d914c +2025-10-29 10:19:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration row_version -> org.hibernate.type.BasicTypeReference@515940af +2025-10-29 10:19:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration object -> org.hibernate.type.JavaObjectType@7bc8ffbc +2025-10-29 10:19:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Object -> org.hibernate.type.JavaObjectType@7bc8ffbc +2025-10-29 10:19:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration null -> org.hibernate.type.NullType@437c1a87 +2025-10-29 10:19:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration imm_date -> org.hibernate.type.BasicTypeReference@5b55c3d6 +2025-10-29 10:19:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration imm_time -> org.hibernate.type.BasicTypeReference@1800c1e3 +2025-10-29 10:19:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration imm_timestamp -> org.hibernate.type.BasicTypeReference@3b8b4846 +2025-10-29 10:19:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration imm_calendar -> org.hibernate.type.BasicTypeReference@4e357792 +2025-10-29 10:19:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration imm_calendar_date -> org.hibernate.type.BasicTypeReference@50734cea +2025-10-29 10:19:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration imm_calendar_time -> org.hibernate.type.BasicTypeReference@4e6280de +2025-10-29 10:19:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration imm_binary -> org.hibernate.type.BasicTypeReference@2fca282c +2025-10-29 10:19:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration imm_serializable -> org.hibernate.type.BasicTypeReference@4a2653a0 +2025-10-29 10:19:43 [main] INFO o.s.o.j.p.SpringPersistenceUnitInfo - No LoadTimeWeaver setup: ignoring JPA class transformer +2025-10-29 10:19:43 [main] INFO com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Starting... +2025-10-29 10:19:44 [main] INFO com.zaxxer.hikari.pool.HikariPool - HikariPool-1 - Added connection org.postgresql.jdbc.PgConnection@53d15034 +2025-10-29 10:19:44 [main] INFO com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Start completed. +2025-10-29 10:19:44 [main] WARN org.hibernate.orm.deprecation - HHH90000025: PostgreSQLDialect does not need to be specified explicitly using 'hibernate.dialect' (remove the property setting and it will be selected by default) +2025-10-29 10:19:44 [main] DEBUG o.h.t.d.sql.spi.DdlTypeRegistry - addDescriptor(2003, org.hibernate.type.descriptor.sql.internal.ArrayDdlTypeImpl@7ec8db0c) replaced previous registration(org.hibernate.type.descriptor.sql.internal.ArrayDdlTypeImpl@4f1a5b93) +2025-10-29 10:19:44 [main] DEBUG o.h.t.d.sql.spi.DdlTypeRegistry - addDescriptor(6, org.hibernate.type.descriptor.sql.internal.CapacityDependentDdlType@22ee1ad7) replaced previous registration(org.hibernate.type.descriptor.sql.internal.DdlTypeImpl@5dd2ea0a) +2025-10-29 10:19:44 [main] DEBUG o.h.t.d.jdbc.spi.JdbcTypeRegistry - addDescriptor(2004, BlobTypeDescriptor(BLOB_BINDING)) replaced previous registration(BlobTypeDescriptor(DEFAULT)) +2025-10-29 10:19:44 [main] DEBUG o.h.t.d.jdbc.spi.JdbcTypeRegistry - addDescriptor(2005, ClobTypeDescriptor(CLOB_BINDING)) replaced previous registration(ClobTypeDescriptor(DEFAULT)) +2025-10-29 10:19:44 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration JAVA_OBJECT -> org.hibernate.type.JavaObjectType@40105b39 +2025-10-29 10:19:44 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Object -> org.hibernate.type.JavaObjectType@40105b39 +2025-10-29 10:19:44 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Type registration key [java.lang.Object] overrode previous entry : `org.hibernate.type.JavaObjectType@7bc8ffbc` +2025-10-29 10:19:44 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration org.hibernate.type.DurationType -> basicType@1(java.time.Duration,3015) +2025-10-29 10:19:44 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration Duration -> basicType@1(java.time.Duration,3015) +2025-10-29 10:19:44 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.Duration -> basicType@1(java.time.Duration,3015) +2025-10-29 10:19:44 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration org.hibernate.type.OffsetDateTimeType -> basicType@2(java.time.OffsetDateTime,3003) +2025-10-29 10:19:44 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration OffsetDateTime -> basicType@2(java.time.OffsetDateTime,3003) +2025-10-29 10:19:44 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.OffsetDateTime -> basicType@2(java.time.OffsetDateTime,3003) +2025-10-29 10:19:44 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration org.hibernate.type.ZonedDateTimeType -> basicType@3(java.time.ZonedDateTime,3003) +2025-10-29 10:19:44 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration ZonedDateTime -> basicType@3(java.time.ZonedDateTime,3003) +2025-10-29 10:19:44 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.ZonedDateTime -> basicType@3(java.time.ZonedDateTime,3003) +2025-10-29 10:19:44 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration org.hibernate.type.OffsetTimeType -> basicType@4(java.time.OffsetTime,3007) +2025-10-29 10:19:44 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration OffsetTime -> basicType@4(java.time.OffsetTime,3007) +2025-10-29 10:19:44 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.OffsetTime -> basicType@4(java.time.OffsetTime,3007) +2025-10-29 10:19:44 [main] DEBUG o.h.type.spi.TypeConfiguration$Scope - Scoping TypeConfiguration [org.hibernate.type.spi.TypeConfiguration@346690d6] to MetadataBuildingContext [org.hibernate.boot.internal.MetadataBuildingContextRootImpl@2831c178] +2025-10-29 10:19: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 10:19:44 [main] DEBUG o.h.type.spi.TypeConfiguration$Scope - Scoping TypeConfiguration [org.hibernate.type.spi.TypeConfiguration@346690d6] to SessionFactoryImplementor [org.hibernate.internal.SessionFactoryImpl@54ee423f] +2025-10-29 10:19:44 [main] DEBUG org.hibernate.SQL - + alter table if exists transcript_segments + alter column text set data type TEXT +2025-10-29 10:19:44 [main] DEBUG org.hibernate.SQL - + alter table if exists transcriptions + alter column full_text set data type TEXT +2025-10-29 10:19:44 [main] TRACE o.h.type.spi.TypeConfiguration$Scope - Handling #sessionFactoryCreated from [org.hibernate.internal.SessionFactoryImpl@54ee423f] for TypeConfiguration +2025-10-29 10:19:44 [main] INFO o.s.o.j.LocalContainerEntityManagerFactoryBean - Initialized JPA EntityManagerFactory for persistence unit 'default' +2025-10-29 10:19: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 10:19:44 [main] INFO o.s.d.j.r.query.QueryEnhancerFactory - Hibernate is in classpath; If applicable, HQL parser will be used. +2025-10-29 10:19:44 [main] WARN c.u.h.stt.service.AzureSpeechService - Azure Speech Subscription Key 미설정 - 시뮬레이션 모드로 실행 +2025-10-29 10:19:44 [main] WARN o.s.b.a.o.j.JpaBaseConfiguration$JpaWebConfiguration - spring.jpa.open-in-view is enabled by default. Therefore, database queries may be performed during view rendering. Explicitly configure spring.jpa.open-in-view to disable this warning +2025-10-29 10:19:45 [main] WARN o.s.b.a.s.s.UserDetailsServiceAutoConfiguration - + +Using generated security password: 91f573f3-0843-4fb5-a408-807ba5b0378a + +This generated password is for development use only. Your security configuration must be updated before running your application in production. + +2025-10-29 10:19:45 [main] INFO o.s.s.c.a.a.c.InitializeUserDetailsBeanManagerConfigurer$InitializeUserDetailsManagerConfigurer - Global AuthenticationManager configured with UserDetailsService bean with name inMemoryUserDetailsManager +2025-10-29 10:19:45 [main] INFO o.s.b.a.e.web.EndpointLinksResolver - Exposing 3 endpoints beneath base path '/actuator' +2025-10-29 10:19:45 [main] INFO o.s.b.w.e.tomcat.TomcatWebServer - Tomcat started on port 8084 (http) with context path '/' +2025-10-29 10:19:45 [main] INFO c.unicorn.hgzero.stt.SttApplication - Started SttApplication in 2.463 seconds (process running for 2.583) +2025-10-29 10:19:55 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:19:55 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - 오디오 청크 없음 - meetingId: test-meeting-001 +2025-10-29 10:19:55 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:20:00 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:20:00 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - 오디오 청크 없음 - meetingId: test-meeting-001 +2025-10-29 10:20:00 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:20:05 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:20:05 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - 오디오 청크 없음 - meetingId: test-meeting-001 +2025-10-29 10:20:05 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:20:10 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:20:10 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - 오디오 청크 없음 - meetingId: test-meeting-001 +2025-10-29 10:20:10 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:20:15 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:20:15 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - 오디오 청크 없음 - meetingId: test-meeting-001 +2025-10-29 10:20:15 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:20:15 [http-nio-8084-exec-1] INFO o.a.c.c.C.[Tomcat].[localhost].[/] - Initializing Spring DispatcherServlet 'dispatcherServlet' +2025-10-29 10:20:15 [http-nio-8084-exec-1] INFO o.s.web.servlet.DispatcherServlet - Initializing Servlet 'dispatcherServlet' +2025-10-29 10:20:15 [http-nio-8084-exec-1] INFO o.s.web.servlet.DispatcherServlet - Completed initialization in 1 ms +2025-10-29 10:20:15 [http-nio-8084-exec-1] INFO c.u.h.s.c.AudioWebSocketHandler - WebSocket 연결 성공 - sessionId: 0a9b6320-768f-3183-cd95-fc77941c3152 +2025-10-29 10:20:16 [http-nio-8084-exec-2] INFO c.u.h.s.c.AudioWebSocketHandler - 녹음 시작 - sessionId: 0a9b6320-768f-3183-cd95-fc77941c3152, meetingId: test-meeting-001 +2025-10-29 10:20:17 [http-nio-8084-exec-3] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:20:17 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 0, size: 8236 bytes +2025-10-29 10:20:17 [http-nio-8084-exec-4] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:20:17 [http-nio-8084-exec-4] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 1, size: 8236 bytes +2025-10-29 10:20:17 [http-nio-8084-exec-5] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:20:17 [http-nio-8084-exec-5] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 2, size: 8236 bytes +2025-10-29 10:20:17 [http-nio-8084-exec-6] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:20:17 [http-nio-8084-exec-6] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 3, size: 8236 bytes +2025-10-29 10:20:18 [http-nio-8084-exec-7] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:20:18 [http-nio-8084-exec-7] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 4, size: 8236 bytes +2025-10-29 10:20:18 [http-nio-8084-exec-8] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:20:18 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 5, size: 8236 bytes +2025-10-29 10:20:18 [http-nio-8084-exec-9] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:20:18 [http-nio-8084-exec-9] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 6, size: 8236 bytes +2025-10-29 10:20:18 [http-nio-8084-exec-10] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:20:18 [http-nio-8084-exec-10] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 7, size: 8236 bytes +2025-10-29 10:20:19 [http-nio-8084-exec-1] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:20:19 [http-nio-8084-exec-1] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 8, size: 8236 bytes +2025-10-29 10:20:19 [http-nio-8084-exec-2] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:20:19 [http-nio-8084-exec-2] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 9, size: 8236 bytes +2025-10-29 10:20:19 [http-nio-8084-exec-3] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:20:19 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 10, size: 8236 bytes +2025-10-29 10:20:19 [http-nio-8084-exec-4] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:20:19 [http-nio-8084-exec-4] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 11, size: 8236 bytes +2025-10-29 10:20:20 [http-nio-8084-exec-5] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:20:20 [http-nio-8084-exec-5] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 12, size: 8236 bytes +2025-10-29 10:20:20 [http-nio-8084-exec-6] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:20:20 [http-nio-8084-exec-6] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 13, size: 8236 bytes +2025-10-29 10:20:20 [http-nio-8084-exec-7] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:20:20 [http-nio-8084-exec-7] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 14, size: 8236 bytes +2025-10-29 10:20:20 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:20:20 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - 오디오 청크 없음 - meetingId: test-meeting-001 +2025-10-29 10:20:20 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:20:20 [http-nio-8084-exec-8] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:20:20 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 15, size: 8236 bytes +2025-10-29 10:20:21 [http-nio-8084-exec-9] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:20:21 [http-nio-8084-exec-9] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 16, size: 8236 bytes +2025-10-29 10:20:21 [http-nio-8084-exec-10] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:20:21 [http-nio-8084-exec-10] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 17, size: 8236 bytes +2025-10-29 10:20:21 [http-nio-8084-exec-1] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:20:21 [http-nio-8084-exec-1] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 18, size: 8236 bytes +2025-10-29 10:20:21 [http-nio-8084-exec-2] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:20:21 [http-nio-8084-exec-2] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 19, size: 8236 bytes +2025-10-29 10:20:22 [http-nio-8084-exec-3] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:20:22 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 20, size: 8236 bytes +2025-10-29 10:20:22 [http-nio-8084-exec-4] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:20:22 [http-nio-8084-exec-4] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 21, size: 8236 bytes +2025-10-29 10:20:22 [http-nio-8084-exec-5] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:20:22 [http-nio-8084-exec-5] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 22, size: 8236 bytes +2025-10-29 10:20:23 [http-nio-8084-exec-6] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:20:23 [http-nio-8084-exec-6] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 23, size: 8236 bytes +2025-10-29 10:20:23 [http-nio-8084-exec-7] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:20:23 [http-nio-8084-exec-7] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 24, size: 8236 bytes +2025-10-29 10:20:23 [http-nio-8084-exec-8] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:20:23 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 25, size: 8236 bytes +2025-10-29 10:20:23 [http-nio-8084-exec-9] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:20:23 [http-nio-8084-exec-9] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 26, size: 8236 bytes +2025-10-29 10:20:24 [http-nio-8084-exec-10] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:20:24 [http-nio-8084-exec-10] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 27, size: 8236 bytes +2025-10-29 10:20:24 [http-nio-8084-exec-1] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:20:24 [http-nio-8084-exec-1] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 28, size: 8236 bytes +2025-10-29 10:20:24 [http-nio-8084-exec-2] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:20:24 [http-nio-8084-exec-2] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 29, size: 8236 bytes +2025-10-29 10:20:24 [http-nio-8084-exec-3] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:20:24 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 30, size: 8236 bytes +2025-10-29 10:20:25 [http-nio-8084-exec-4] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:20:25 [http-nio-8084-exec-4] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 31, size: 8236 bytes +2025-10-29 10:20:25 [http-nio-8084-exec-5] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:20:25 [http-nio-8084-exec-5] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 32, size: 8236 bytes +2025-10-29 10:20:25 [http-nio-8084-exec-6] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:20:25 [http-nio-8084-exec-6] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 33, size: 8236 bytes +2025-10-29 10:20:25 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:20:25 [http-nio-8084-exec-7] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:20:25 [http-nio-8084-exec-7] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 34, size: 8236 bytes +2025-10-29 10:20:25 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - 오디오 청크 없음 - meetingId: test-meeting-001 +2025-10-29 10:20:25 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:20:26 [http-nio-8084-exec-8] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:20:26 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 35, size: 8236 bytes +2025-10-29 10:20:26 [http-nio-8084-exec-9] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:20:26 [http-nio-8084-exec-9] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 36, size: 8236 bytes +2025-10-29 10:20:26 [http-nio-8084-exec-10] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:20:26 [http-nio-8084-exec-10] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 37, size: 8236 bytes +2025-10-29 10:20:26 [http-nio-8084-exec-1] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:20:26 [http-nio-8084-exec-1] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 38, size: 8236 bytes +2025-10-29 10:20:27 [http-nio-8084-exec-2] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:20:27 [http-nio-8084-exec-2] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 39, size: 8236 bytes +2025-10-29 10:20:27 [http-nio-8084-exec-3] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:20:27 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 40, size: 8236 bytes +2025-10-29 10:20:27 [http-nio-8084-exec-4] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:20:27 [http-nio-8084-exec-4] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 41, size: 8236 bytes +2025-10-29 10:20:27 [http-nio-8084-exec-5] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:20:27 [http-nio-8084-exec-5] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 42, size: 8236 bytes +2025-10-29 10:20:28 [http-nio-8084-exec-6] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:20:28 [http-nio-8084-exec-6] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 43, size: 8236 bytes +2025-10-29 10:20:28 [http-nio-8084-exec-7] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:20:28 [http-nio-8084-exec-7] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 44, size: 8236 bytes +2025-10-29 10:20:28 [http-nio-8084-exec-8] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:20:28 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 45, size: 8236 bytes +2025-10-29 10:20:28 [http-nio-8084-exec-9] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:20:28 [http-nio-8084-exec-9] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 46, size: 8236 bytes +2025-10-29 10:20:29 [http-nio-8084-exec-10] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:20:29 [http-nio-8084-exec-10] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 47, size: 8236 bytes +2025-10-29 10:20:29 [http-nio-8084-exec-1] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:20:29 [http-nio-8084-exec-1] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 48, size: 8236 bytes +2025-10-29 10:20:29 [http-nio-8084-exec-2] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:20:29 [http-nio-8084-exec-2] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 49, size: 8236 bytes +2025-10-29 10:20:29 [http-nio-8084-exec-3] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:20:29 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 50, size: 8236 bytes +2025-10-29 10:20:30 [http-nio-8084-exec-4] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:20:30 [http-nio-8084-exec-4] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 51, size: 8236 bytes +2025-10-29 10:20:30 [http-nio-8084-exec-5] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:20:30 [http-nio-8084-exec-5] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 52, size: 8236 bytes +2025-10-29 10:20:30 [http-nio-8084-exec-6] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:20:30 [http-nio-8084-exec-6] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 53, size: 8236 bytes +2025-10-29 10:20:30 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:20:30 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - 오디오 청크 없음 - meetingId: test-meeting-001 +2025-10-29 10:20:30 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:20:30 [http-nio-8084-exec-7] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:20:30 [http-nio-8084-exec-7] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 54, size: 8236 bytes +2025-10-29 10:20:31 [http-nio-8084-exec-8] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:20:31 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 55, size: 8236 bytes +2025-10-29 10:20:31 [http-nio-8084-exec-9] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:20:31 [http-nio-8084-exec-9] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 56, size: 8236 bytes +2025-10-29 10:20:31 [http-nio-8084-exec-10] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:20:31 [http-nio-8084-exec-10] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 57, size: 8236 bytes +2025-10-29 10:20:31 [http-nio-8084-exec-1] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:20:31 [http-nio-8084-exec-1] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 58, size: 8236 bytes +2025-10-29 10:20:32 [http-nio-8084-exec-2] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:20:32 [http-nio-8084-exec-2] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 59, size: 8236 bytes +2025-10-29 10:20:32 [http-nio-8084-exec-3] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:20:32 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 60, size: 8236 bytes +2025-10-29 10:20:32 [http-nio-8084-exec-4] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:20:32 [http-nio-8084-exec-4] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 61, size: 8236 bytes +2025-10-29 10:20:32 [http-nio-8084-exec-5] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:20:32 [http-nio-8084-exec-5] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 62, size: 8236 bytes +2025-10-29 10:20:33 [http-nio-8084-exec-6] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:20:33 [http-nio-8084-exec-6] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 63, size: 8236 bytes +2025-10-29 10:20:33 [http-nio-8084-exec-7] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:20:33 [http-nio-8084-exec-7] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 64, size: 8236 bytes +2025-10-29 10:20:33 [http-nio-8084-exec-8] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:20:33 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 65, size: 8236 bytes +2025-10-29 10:20:34 [http-nio-8084-exec-9] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:20:34 [http-nio-8084-exec-9] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 66, size: 8236 bytes +2025-10-29 10:20:34 [http-nio-8084-exec-10] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:20:34 [http-nio-8084-exec-10] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 67, size: 8236 bytes +2025-10-29 10:20:34 [http-nio-8084-exec-1] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:20:34 [http-nio-8084-exec-1] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 68, size: 8236 bytes +2025-10-29 10:20:34 [http-nio-8084-exec-2] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:20:34 [http-nio-8084-exec-2] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 69, size: 8236 bytes +2025-10-29 10:20:35 [http-nio-8084-exec-3] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:20:35 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 70, size: 8236 bytes +2025-10-29 10:20:35 [http-nio-8084-exec-4] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:20:35 [http-nio-8084-exec-4] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 71, size: 8236 bytes +2025-10-29 10:20:35 [http-nio-8084-exec-5] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:20:35 [http-nio-8084-exec-5] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 72, size: 8236 bytes +2025-10-29 10:20:35 [http-nio-8084-exec-6] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:20:35 [http-nio-8084-exec-6] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 73, size: 8236 bytes +2025-10-29 10:20:35 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:20:35 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - 오디오 청크 없음 - meetingId: test-meeting-001 +2025-10-29 10:20:35 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:20:36 [http-nio-8084-exec-7] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:20:36 [http-nio-8084-exec-7] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 74, size: 8236 bytes +2025-10-29 10:20:36 [http-nio-8084-exec-8] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:20:36 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 75, size: 8236 bytes +2025-10-29 10:20:36 [http-nio-8084-exec-9] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:20:36 [http-nio-8084-exec-9] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 76, size: 8236 bytes +2025-10-29 10:20:36 [http-nio-8084-exec-10] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:20:36 [http-nio-8084-exec-10] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 77, size: 8236 bytes +2025-10-29 10:20:37 [http-nio-8084-exec-1] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:20:37 [http-nio-8084-exec-1] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 78, size: 8236 bytes +2025-10-29 10:20:37 [http-nio-8084-exec-2] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:20:37 [http-nio-8084-exec-2] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 79, size: 8236 bytes +2025-10-29 10:20:37 [http-nio-8084-exec-3] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:20:37 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 80, size: 8236 bytes +2025-10-29 10:20:37 [http-nio-8084-exec-4] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:20:37 [http-nio-8084-exec-4] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 81, size: 8236 bytes +2025-10-29 10:20:38 [http-nio-8084-exec-5] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:20:38 [http-nio-8084-exec-5] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 82, size: 8236 bytes +2025-10-29 10:20:38 [http-nio-8084-exec-6] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:20:38 [http-nio-8084-exec-6] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 83, size: 8236 bytes +2025-10-29 10:20:38 [http-nio-8084-exec-7] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:20:38 [http-nio-8084-exec-7] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 84, size: 8236 bytes +2025-10-29 10:20:38 [http-nio-8084-exec-8] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:20:38 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 85, size: 8236 bytes +2025-10-29 10:20:39 [http-nio-8084-exec-9] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:20:39 [http-nio-8084-exec-9] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 86, size: 8236 bytes +2025-10-29 10:20:39 [http-nio-8084-exec-10] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:20:39 [http-nio-8084-exec-10] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 87, size: 8236 bytes +2025-10-29 10:20:39 [http-nio-8084-exec-1] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:20:39 [http-nio-8084-exec-1] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 88, size: 8236 bytes +2025-10-29 10:20:39 [http-nio-8084-exec-2] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:20:39 [http-nio-8084-exec-2] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 89, size: 8236 bytes +2025-10-29 10:20:40 [http-nio-8084-exec-3] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:20:40 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 90, size: 8236 bytes +2025-10-29 10:20:40 [http-nio-8084-exec-4] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:20:40 [http-nio-8084-exec-4] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 91, size: 8236 bytes +2025-10-29 10:20:40 [http-nio-8084-exec-5] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:20:40 [http-nio-8084-exec-5] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 92, size: 8236 bytes +2025-10-29 10:20:40 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:20:40 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - 오디오 청크 없음 - meetingId: test-meeting-001 +2025-10-29 10:20:40 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:20:40 [http-nio-8084-exec-6] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:20:40 [http-nio-8084-exec-6] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 93, size: 8236 bytes +2025-10-29 10:20:41 [http-nio-8084-exec-7] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:20:41 [http-nio-8084-exec-7] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 94, size: 8236 bytes +2025-10-29 10:20:41 [http-nio-8084-exec-8] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:20:41 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 95, size: 8236 bytes +2025-10-29 10:20:41 [http-nio-8084-exec-9] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:20:41 [http-nio-8084-exec-9] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 96, size: 8236 bytes +2025-10-29 10:20:41 [http-nio-8084-exec-10] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:20:41 [http-nio-8084-exec-10] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 97, size: 8236 bytes +2025-10-29 10:20:42 [http-nio-8084-exec-1] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:20:42 [http-nio-8084-exec-1] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 98, size: 8236 bytes +2025-10-29 10:20:42 [http-nio-8084-exec-2] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:20:42 [http-nio-8084-exec-2] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 99, size: 8236 bytes +2025-10-29 10:20:42 [http-nio-8084-exec-3] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:20:42 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 100, size: 8236 bytes +2025-10-29 10:20:42 [http-nio-8084-exec-4] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:20:42 [http-nio-8084-exec-4] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 101, size: 8236 bytes +2025-10-29 10:20:43 [http-nio-8084-exec-5] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:20:43 [http-nio-8084-exec-5] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 102, size: 8236 bytes +2025-10-29 10:20:43 [http-nio-8084-exec-6] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:20:43 [http-nio-8084-exec-6] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 103, size: 8236 bytes +2025-10-29 10:20:43 [http-nio-8084-exec-7] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:20:43 [http-nio-8084-exec-7] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 104, size: 8236 bytes +2025-10-29 10:20:44 [http-nio-8084-exec-8] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:20:44 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 105, size: 8236 bytes +2025-10-29 10:20:44 [http-nio-8084-exec-9] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:20:44 [http-nio-8084-exec-9] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 106, size: 8236 bytes +2025-10-29 10:20:44 [http-nio-8084-exec-10] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:20:44 [http-nio-8084-exec-10] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 107, size: 8236 bytes +2025-10-29 10:20:44 [http-nio-8084-exec-1] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:20:44 [http-nio-8084-exec-1] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 108, size: 8236 bytes +2025-10-29 10:20:45 [http-nio-8084-exec-2] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:20:45 [http-nio-8084-exec-2] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 109, size: 8236 bytes +2025-10-29 10:20:45 [http-nio-8084-exec-3] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:20:45 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 110, size: 8236 bytes +2025-10-29 10:20:45 [http-nio-8084-exec-4] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:20:45 [http-nio-8084-exec-4] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 111, size: 8236 bytes +2025-10-29 10:20:45 [http-nio-8084-exec-5] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:20:45 [http-nio-8084-exec-5] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 112, size: 8236 bytes +2025-10-29 10:20:45 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:20:45 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - 오디오 청크 없음 - meetingId: test-meeting-001 +2025-10-29 10:20:45 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:20:46 [http-nio-8084-exec-6] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:20:46 [http-nio-8084-exec-6] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 113, size: 8236 bytes +2025-10-29 10:20:46 [http-nio-8084-exec-7] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:20:46 [http-nio-8084-exec-7] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 114, size: 8236 bytes +2025-10-29 10:20:46 [http-nio-8084-exec-8] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:20:46 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 115, size: 8236 bytes +2025-10-29 10:20:46 [http-nio-8084-exec-9] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:20:46 [http-nio-8084-exec-9] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 116, size: 8236 bytes +2025-10-29 10:20:47 [http-nio-8084-exec-10] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:20:47 [http-nio-8084-exec-10] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 117, size: 8236 bytes +2025-10-29 10:20:47 [http-nio-8084-exec-1] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:20:47 [http-nio-8084-exec-1] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 118, size: 8236 bytes +2025-10-29 10:20:47 [http-nio-8084-exec-2] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:20:47 [http-nio-8084-exec-2] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 119, size: 8236 bytes +2025-10-29 10:20:47 [http-nio-8084-exec-3] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:20:47 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 120, size: 8236 bytes +2025-10-29 10:20:48 [http-nio-8084-exec-4] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:20:48 [http-nio-8084-exec-4] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 121, size: 8236 bytes +2025-10-29 10:20:48 [http-nio-8084-exec-5] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:20:48 [http-nio-8084-exec-5] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 122, size: 8236 bytes +2025-10-29 10:20:48 [http-nio-8084-exec-6] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:20:48 [http-nio-8084-exec-6] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 123, size: 8236 bytes +2025-10-29 10:20:48 [http-nio-8084-exec-7] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:20:48 [http-nio-8084-exec-7] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 124, size: 8236 bytes +2025-10-29 10:20:49 [http-nio-8084-exec-8] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:20:49 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 125, size: 8236 bytes +2025-10-29 10:20:49 [http-nio-8084-exec-9] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:20:49 [http-nio-8084-exec-9] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 126, size: 8236 bytes +2025-10-29 10:20:49 [http-nio-8084-exec-10] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:20:49 [http-nio-8084-exec-10] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 127, size: 8236 bytes +2025-10-29 10:20:49 [http-nio-8084-exec-1] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:20:49 [http-nio-8084-exec-1] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 128, size: 8236 bytes +2025-10-29 10:20:50 [http-nio-8084-exec-2] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:20:50 [http-nio-8084-exec-2] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 129, size: 8236 bytes +2025-10-29 10:20:50 [http-nio-8084-exec-3] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:20:50 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 130, size: 8236 bytes +2025-10-29 10:20:50 [http-nio-8084-exec-4] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:20:50 [http-nio-8084-exec-4] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 131, size: 8236 bytes +2025-10-29 10:20:50 [http-nio-8084-exec-5] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:20:50 [http-nio-8084-exec-5] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 132, size: 8236 bytes +2025-10-29 10:20:50 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:20:51 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - 오디오 청크 없음 - meetingId: test-meeting-001 +2025-10-29 10:20:51 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:20:51 [http-nio-8084-exec-6] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:20:51 [http-nio-8084-exec-6] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 133, size: 8236 bytes +2025-10-29 10:20:51 [http-nio-8084-exec-7] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:20:51 [http-nio-8084-exec-7] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 134, size: 8236 bytes +2025-10-29 10:20:51 [http-nio-8084-exec-8] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:20:51 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 135, size: 8236 bytes +2025-10-29 10:20:51 [http-nio-8084-exec-9] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:20:51 [http-nio-8084-exec-9] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 136, size: 8236 bytes +2025-10-29 10:20:52 [http-nio-8084-exec-10] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:20:52 [http-nio-8084-exec-10] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 137, size: 8236 bytes +2025-10-29 10:20:52 [http-nio-8084-exec-1] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:20:52 [http-nio-8084-exec-1] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 138, size: 8236 bytes +2025-10-29 10:20:52 [http-nio-8084-exec-2] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:20:52 [http-nio-8084-exec-2] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 139, size: 8236 bytes +2025-10-29 10:20:52 [http-nio-8084-exec-3] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:20:52 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 140, size: 8236 bytes +2025-10-29 10:20:53 [http-nio-8084-exec-4] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:20:53 [http-nio-8084-exec-4] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 141, size: 8236 bytes +2025-10-29 10:20:53 [http-nio-8084-exec-5] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:20:53 [http-nio-8084-exec-5] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 142, size: 8236 bytes +2025-10-29 10:20:53 [http-nio-8084-exec-6] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:20:53 [http-nio-8084-exec-6] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 143, size: 8236 bytes +2025-10-29 10:20:53 [http-nio-8084-exec-7] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:20:53 [http-nio-8084-exec-7] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 144, size: 8236 bytes +2025-10-29 10:20:54 [http-nio-8084-exec-8] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:20:54 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 145, size: 8236 bytes +2025-10-29 10:20:54 [http-nio-8084-exec-9] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:20:54 [http-nio-8084-exec-9] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 146, size: 8236 bytes +2025-10-29 10:20:54 [http-nio-8084-exec-10] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:20:54 [http-nio-8084-exec-10] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 147, size: 8236 bytes +2025-10-29 10:20:55 [http-nio-8084-exec-1] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:20:55 [http-nio-8084-exec-1] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 148, size: 8236 bytes +2025-10-29 10:20:55 [http-nio-8084-exec-2] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:20:55 [http-nio-8084-exec-2] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 149, size: 8236 bytes +2025-10-29 10:20:55 [http-nio-8084-exec-3] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:20:55 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 150, size: 8236 bytes +2025-10-29 10:20:55 [http-nio-8084-exec-4] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:20:55 [http-nio-8084-exec-4] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 151, size: 8236 bytes +2025-10-29 10:20:56 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:20:56 [http-nio-8084-exec-5] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:20:56 [http-nio-8084-exec-5] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 152, size: 8236 bytes +2025-10-29 10:20:56 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - 오디오 청크 없음 - meetingId: test-meeting-001 +2025-10-29 10:20:56 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:20:56 [http-nio-8084-exec-6] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:20:56 [http-nio-8084-exec-6] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 153, size: 8236 bytes +2025-10-29 10:20:56 [http-nio-8084-exec-7] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:20:56 [http-nio-8084-exec-7] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 154, size: 8236 bytes +2025-10-29 10:20:56 [http-nio-8084-exec-8] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:20:56 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 155, size: 8236 bytes +2025-10-29 10:20:57 [http-nio-8084-exec-9] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:20:57 [http-nio-8084-exec-9] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 156, size: 8236 bytes +2025-10-29 10:20:57 [http-nio-8084-exec-10] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:20:57 [http-nio-8084-exec-10] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 157, size: 8236 bytes +2025-10-29 10:20:57 [http-nio-8084-exec-1] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:20:57 [http-nio-8084-exec-1] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 158, size: 8236 bytes +2025-10-29 10:20:57 [http-nio-8084-exec-2] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:20:57 [http-nio-8084-exec-2] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 159, size: 8236 bytes +2025-10-29 10:20:58 [http-nio-8084-exec-3] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:20:58 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 160, size: 8236 bytes +2025-10-29 10:20:58 [http-nio-8084-exec-4] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:20:58 [http-nio-8084-exec-4] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 161, size: 8236 bytes +2025-10-29 10:20:58 [http-nio-8084-exec-5] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:20:58 [http-nio-8084-exec-5] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 162, size: 8236 bytes +2025-10-29 10:20:58 [http-nio-8084-exec-6] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:20:58 [http-nio-8084-exec-6] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 163, size: 8236 bytes +2025-10-29 10:20:59 [http-nio-8084-exec-7] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:20:59 [http-nio-8084-exec-7] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 164, size: 8236 bytes +2025-10-29 10:20:59 [http-nio-8084-exec-8] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:20:59 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 165, size: 8236 bytes +2025-10-29 10:20:59 [http-nio-8084-exec-9] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:20:59 [http-nio-8084-exec-9] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 166, size: 8236 bytes +2025-10-29 10:20:59 [http-nio-8084-exec-10] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:20:59 [http-nio-8084-exec-10] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 167, size: 8236 bytes +2025-10-29 10:21:00 [http-nio-8084-exec-1] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:21:00 [http-nio-8084-exec-1] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 168, size: 8236 bytes +2025-10-29 10:21:00 [http-nio-8084-exec-2] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:21:00 [http-nio-8084-exec-2] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 169, size: 8236 bytes +2025-10-29 10:21:00 [http-nio-8084-exec-3] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:21:00 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 170, size: 8236 bytes +2025-10-29 10:21:00 [http-nio-8084-exec-4] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:21:00 [http-nio-8084-exec-4] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 171, size: 8236 bytes +2025-10-29 10:21:01 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:21:01 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - 오디오 청크 없음 - meetingId: test-meeting-001 +2025-10-29 10:21:01 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:21:01 [http-nio-8084-exec-5] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:21:01 [http-nio-8084-exec-5] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 172, size: 8236 bytes +2025-10-29 10:21:01 [http-nio-8084-exec-6] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:21:01 [http-nio-8084-exec-6] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 173, size: 8236 bytes +2025-10-29 10:21:01 [http-nio-8084-exec-7] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:21:01 [http-nio-8084-exec-7] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 174, size: 8236 bytes +2025-10-29 10:21:01 [http-nio-8084-exec-8] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:21:01 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 175, size: 8236 bytes +2025-10-29 10:21:02 [http-nio-8084-exec-9] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:21:02 [http-nio-8084-exec-9] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 176, size: 8236 bytes +2025-10-29 10:21:02 [http-nio-8084-exec-10] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:21:02 [http-nio-8084-exec-10] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 177, size: 8236 bytes +2025-10-29 10:21:02 [http-nio-8084-exec-1] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:21:02 [http-nio-8084-exec-1] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 178, size: 8236 bytes +2025-10-29 10:21:02 [http-nio-8084-exec-2] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:21:02 [http-nio-8084-exec-2] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 179, size: 8236 bytes +2025-10-29 10:21:03 [http-nio-8084-exec-3] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:21:03 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 180, size: 8236 bytes +2025-10-29 10:21:03 [http-nio-8084-exec-4] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:21:03 [http-nio-8084-exec-4] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 181, size: 8236 bytes +2025-10-29 10:21:03 [http-nio-8084-exec-5] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:21:03 [http-nio-8084-exec-5] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 182, size: 8236 bytes +2025-10-29 10:21:04 [http-nio-8084-exec-6] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:21:04 [http-nio-8084-exec-6] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 183, size: 8236 bytes +2025-10-29 10:21:04 [http-nio-8084-exec-7] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:21:04 [http-nio-8084-exec-7] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 184, size: 8236 bytes +2025-10-29 10:21:04 [http-nio-8084-exec-8] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:21:04 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 185, size: 8236 bytes +2025-10-29 10:21:04 [http-nio-8084-exec-9] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:21:04 [http-nio-8084-exec-9] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 186, size: 8236 bytes +2025-10-29 10:21:04 [http-nio-8084-exec-10] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:21:04 [http-nio-8084-exec-10] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 187, size: 8236 bytes +2025-10-29 10:21:05 [http-nio-8084-exec-1] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:21:05 [http-nio-8084-exec-1] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 188, size: 8236 bytes +2025-10-29 10:21:05 [http-nio-8084-exec-2] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:21:05 [http-nio-8084-exec-2] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 189, size: 8236 bytes +2025-10-29 10:21:05 [http-nio-8084-exec-3] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:21:05 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 190, size: 8236 bytes +2025-10-29 10:21:06 [http-nio-8084-exec-4] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:21:06 [http-nio-8084-exec-4] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 191, size: 8236 bytes +2025-10-29 10:21:06 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:21:06 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - 오디오 청크 없음 - meetingId: test-meeting-001 +2025-10-29 10:21:06 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:21:06 [http-nio-8084-exec-5] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:21:06 [http-nio-8084-exec-5] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 192, size: 8236 bytes +2025-10-29 10:21:06 [http-nio-8084-exec-6] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:21:06 [http-nio-8084-exec-6] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 193, size: 8236 bytes +2025-10-29 10:21:06 [http-nio-8084-exec-7] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:21:06 [http-nio-8084-exec-7] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 194, size: 8236 bytes +2025-10-29 10:21:07 [http-nio-8084-exec-8] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:21:07 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 195, size: 8236 bytes +2025-10-29 10:21:07 [http-nio-8084-exec-9] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:21:07 [http-nio-8084-exec-9] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 196, size: 8236 bytes +2025-10-29 10:21:07 [http-nio-8084-exec-10] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:21:07 [http-nio-8084-exec-10] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 197, size: 8236 bytes +2025-10-29 10:21:07 [http-nio-8084-exec-1] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:21:07 [http-nio-8084-exec-1] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 198, size: 8236 bytes +2025-10-29 10:21:08 [http-nio-8084-exec-2] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:21:08 [http-nio-8084-exec-2] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 199, size: 8236 bytes +2025-10-29 10:21:08 [http-nio-8084-exec-3] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:21:08 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 200, size: 8236 bytes +2025-10-29 10:21:08 [http-nio-8084-exec-4] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:21:08 [http-nio-8084-exec-4] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 201, size: 8236 bytes +2025-10-29 10:21:08 [http-nio-8084-exec-5] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:21:08 [http-nio-8084-exec-5] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 202, size: 8236 bytes +2025-10-29 10:21:09 [http-nio-8084-exec-6] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:21:09 [http-nio-8084-exec-6] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 203, size: 8236 bytes +2025-10-29 10:21:09 [http-nio-8084-exec-7] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:21:09 [http-nio-8084-exec-7] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 204, size: 8236 bytes +2025-10-29 10:21:09 [http-nio-8084-exec-8] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:21:09 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 205, size: 8236 bytes +2025-10-29 10:21:09 [http-nio-8084-exec-9] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:21:09 [http-nio-8084-exec-9] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 206, size: 8236 bytes +2025-10-29 10:21:10 [http-nio-8084-exec-10] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:21:10 [http-nio-8084-exec-10] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 207, size: 8236 bytes +2025-10-29 10:21:10 [http-nio-8084-exec-1] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:21:10 [http-nio-8084-exec-1] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 208, size: 8236 bytes +2025-10-29 10:21:10 [http-nio-8084-exec-2] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:21:10 [http-nio-8084-exec-2] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 209, size: 8236 bytes +2025-10-29 10:21:10 [http-nio-8084-exec-3] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:21:10 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 210, size: 8236 bytes +2025-10-29 10:21:11 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:21:11 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - 오디오 청크 없음 - meetingId: test-meeting-001 +2025-10-29 10:21:11 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:21:11 [http-nio-8084-exec-4] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:21:11 [http-nio-8084-exec-4] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 211, size: 8236 bytes +2025-10-29 10:21:11 [http-nio-8084-exec-5] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:21:11 [http-nio-8084-exec-5] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 212, size: 8236 bytes +2025-10-29 10:21:11 [http-nio-8084-exec-6] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:21:11 [http-nio-8084-exec-6] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 213, size: 8236 bytes +2025-10-29 10:21:11 [http-nio-8084-exec-7] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:21:11 [http-nio-8084-exec-7] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 214, size: 8236 bytes +2025-10-29 10:21:12 [http-nio-8084-exec-8] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:21:12 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 215, size: 8236 bytes +2025-10-29 10:21:12 [http-nio-8084-exec-9] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:21:12 [http-nio-8084-exec-9] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 216, size: 8236 bytes +2025-10-29 10:21:12 [http-nio-8084-exec-10] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:21:12 [http-nio-8084-exec-10] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 217, size: 8236 bytes +2025-10-29 10:21:13 [http-nio-8084-exec-1] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:21:13 [http-nio-8084-exec-1] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 218, size: 8236 bytes +2025-10-29 10:21:13 [http-nio-8084-exec-2] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:21:13 [http-nio-8084-exec-2] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 219, size: 8236 bytes +2025-10-29 10:21:13 [http-nio-8084-exec-3] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:21:13 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 220, size: 8236 bytes +2025-10-29 10:21:13 [http-nio-8084-exec-4] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:21:13 [http-nio-8084-exec-4] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 221, size: 8236 bytes +2025-10-29 10:21:13 [http-nio-8084-exec-5] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:21:13 [http-nio-8084-exec-5] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 222, size: 8236 bytes +2025-10-29 10:21:14 [http-nio-8084-exec-6] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:21:14 [http-nio-8084-exec-6] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 223, size: 8236 bytes +2025-10-29 10:21:14 [http-nio-8084-exec-7] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:21:14 [http-nio-8084-exec-7] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 224, size: 8236 bytes +2025-10-29 10:21:14 [http-nio-8084-exec-8] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:21:14 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 225, size: 8236 bytes +2025-10-29 10:21:14 [http-nio-8084-exec-9] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:21:14 [http-nio-8084-exec-9] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 226, size: 8236 bytes +2025-10-29 10:21:15 [http-nio-8084-exec-10] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:21:15 [http-nio-8084-exec-10] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 227, size: 8236 bytes +2025-10-29 10:21:15 [http-nio-8084-exec-1] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:21:15 [http-nio-8084-exec-1] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 228, size: 8236 bytes +2025-10-29 10:21:15 [http-nio-8084-exec-2] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:21:15 [http-nio-8084-exec-2] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 229, size: 8236 bytes +2025-10-29 10:21:15 [http-nio-8084-exec-3] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:21:15 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 230, size: 8236 bytes +2025-10-29 10:21:16 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:21:16 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - 오디오 청크 없음 - meetingId: test-meeting-001 +2025-10-29 10:21:16 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:21:16 [http-nio-8084-exec-4] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:21:16 [http-nio-8084-exec-4] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 231, size: 8236 bytes +2025-10-29 10:21:16 [http-nio-8084-exec-5] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:21:16 [http-nio-8084-exec-5] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 232, size: 8236 bytes +2025-10-29 10:21:16 [http-nio-8084-exec-6] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:21:16 [http-nio-8084-exec-6] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 233, size: 8236 bytes +2025-10-29 10:21:17 [http-nio-8084-exec-7] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:21:17 [http-nio-8084-exec-7] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 234, size: 8236 bytes +2025-10-29 10:21:17 [http-nio-8084-exec-8] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:21:17 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 235, size: 8236 bytes +2025-10-29 10:21:17 [http-nio-8084-exec-9] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:21:17 [http-nio-8084-exec-9] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 236, size: 8236 bytes +2025-10-29 10:21:17 [http-nio-8084-exec-10] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:21:17 [http-nio-8084-exec-10] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 237, size: 8236 bytes +2025-10-29 10:21:18 [http-nio-8084-exec-1] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:21:18 [http-nio-8084-exec-1] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 238, size: 8236 bytes +2025-10-29 10:21:18 [http-nio-8084-exec-2] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:21:18 [http-nio-8084-exec-2] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 239, size: 8236 bytes +2025-10-29 10:21:18 [http-nio-8084-exec-3] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:21:18 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 240, size: 8236 bytes +2025-10-29 10:21:18 [http-nio-8084-exec-4] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:21:18 [http-nio-8084-exec-4] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 241, size: 8236 bytes +2025-10-29 10:21:19 [http-nio-8084-exec-5] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:21:19 [http-nio-8084-exec-5] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 242, size: 8236 bytes +2025-10-29 10:21:19 [http-nio-8084-exec-6] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:21:19 [http-nio-8084-exec-6] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 243, size: 8236 bytes +2025-10-29 10:21:19 [http-nio-8084-exec-7] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:21:19 [http-nio-8084-exec-7] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 244, size: 8236 bytes +2025-10-29 10:21:19 [http-nio-8084-exec-8] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:21:19 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 245, size: 8236 bytes +2025-10-29 10:21:20 [http-nio-8084-exec-9] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:21:20 [http-nio-8084-exec-9] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 246, size: 8236 bytes +2025-10-29 10:21:20 [http-nio-8084-exec-10] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:21:20 [http-nio-8084-exec-10] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 247, size: 8236 bytes +2025-10-29 10:21:20 [http-nio-8084-exec-1] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:21:20 [http-nio-8084-exec-1] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 248, size: 8236 bytes +2025-10-29 10:21:20 [http-nio-8084-exec-2] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:21:20 [http-nio-8084-exec-2] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 249, size: 8236 bytes +2025-10-29 10:21:21 [http-nio-8084-exec-3] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:21:21 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 250, size: 8236 bytes +2025-10-29 10:21:21 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:21:21 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - 오디오 청크 없음 - meetingId: test-meeting-001 +2025-10-29 10:21:21 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:21:21 [http-nio-8084-exec-4] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:21:21 [http-nio-8084-exec-4] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 251, size: 8236 bytes +2025-10-29 10:21:21 [http-nio-8084-exec-5] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:21:21 [http-nio-8084-exec-5] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 252, size: 8236 bytes +2025-10-29 10:21:21 [http-nio-8084-exec-6] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:21:21 [http-nio-8084-exec-6] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 253, size: 8236 bytes +2025-10-29 10:21:22 [http-nio-8084-exec-7] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:21:22 [http-nio-8084-exec-7] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 254, size: 8236 bytes +2025-10-29 10:21:22 [http-nio-8084-exec-8] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:21:22 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 255, size: 8236 bytes +2025-10-29 10:21:22 [http-nio-8084-exec-9] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:21:22 [http-nio-8084-exec-9] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 256, size: 8236 bytes +2025-10-29 10:21:22 [http-nio-8084-exec-10] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:21:22 [http-nio-8084-exec-10] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 257, size: 8236 bytes +2025-10-29 10:21:23 [http-nio-8084-exec-1] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:21:23 [http-nio-8084-exec-1] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 258, size: 8236 bytes +2025-10-29 10:21:23 [http-nio-8084-exec-2] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:21:23 [http-nio-8084-exec-2] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 259, size: 8236 bytes +2025-10-29 10:21:23 [http-nio-8084-exec-3] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:21:23 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 260, size: 8236 bytes +2025-10-29 10:21:23 [http-nio-8084-exec-4] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:21:23 [http-nio-8084-exec-4] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 261, size: 8236 bytes +2025-10-29 10:21:24 [http-nio-8084-exec-5] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:21:24 [http-nio-8084-exec-5] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 262, size: 8236 bytes +2025-10-29 10:21:24 [http-nio-8084-exec-6] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:21:24 [http-nio-8084-exec-6] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 263, size: 8236 bytes +2025-10-29 10:21:24 [http-nio-8084-exec-7] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:21:24 [http-nio-8084-exec-7] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 264, size: 8236 bytes +2025-10-29 10:21:24 [http-nio-8084-exec-8] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:21:24 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 265, size: 8236 bytes +2025-10-29 10:21:25 [http-nio-8084-exec-9] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:21:25 [http-nio-8084-exec-9] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 266, size: 8236 bytes +2025-10-29 10:21:25 [http-nio-8084-exec-10] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:21:25 [http-nio-8084-exec-10] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 267, size: 8236 bytes +2025-10-29 10:21:25 [http-nio-8084-exec-1] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:21:25 [http-nio-8084-exec-1] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 268, size: 8236 bytes +2025-10-29 10:21:25 [http-nio-8084-exec-2] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:21:25 [http-nio-8084-exec-2] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 269, size: 8236 bytes +2025-10-29 10:21:26 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:21:26 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - 오디오 청크 없음 - meetingId: test-meeting-001 +2025-10-29 10:21:26 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:21:26 [http-nio-8084-exec-3] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:21:26 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 270, size: 8236 bytes +2025-10-29 10:21:26 [http-nio-8084-exec-4] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:21:26 [http-nio-8084-exec-4] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 271, size: 8236 bytes +2025-10-29 10:21:26 [http-nio-8084-exec-5] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:21:26 [http-nio-8084-exec-5] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 272, size: 8236 bytes +2025-10-29 10:21:26 [http-nio-8084-exec-6] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:21:26 [http-nio-8084-exec-6] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 273, size: 8236 bytes +2025-10-29 10:21:27 [http-nio-8084-exec-7] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:21:27 [http-nio-8084-exec-7] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 274, size: 8236 bytes +2025-10-29 10:21:27 [http-nio-8084-exec-8] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:21:27 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 275, size: 8236 bytes +2025-10-29 10:21:27 [http-nio-8084-exec-9] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:21:27 [http-nio-8084-exec-9] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 276, size: 8236 bytes +2025-10-29 10:21:28 [http-nio-8084-exec-10] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:21:28 [http-nio-8084-exec-10] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 277, size: 8236 bytes +2025-10-29 10:21:28 [http-nio-8084-exec-1] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:21:28 [http-nio-8084-exec-1] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 278, size: 8236 bytes +2025-10-29 10:21:28 [http-nio-8084-exec-2] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:21:28 [http-nio-8084-exec-2] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 279, size: 8236 bytes +2025-10-29 10:21:28 [http-nio-8084-exec-3] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:21:28 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 280, size: 8236 bytes +2025-10-29 10:21:29 [http-nio-8084-exec-4] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:21:29 [http-nio-8084-exec-4] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 281, size: 8236 bytes +2025-10-29 10:21:29 [http-nio-8084-exec-5] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:21:29 [http-nio-8084-exec-5] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 282, size: 8236 bytes +2025-10-29 10:21:29 [http-nio-8084-exec-6] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:21:29 [http-nio-8084-exec-6] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 283, size: 8236 bytes +2025-10-29 10:21:29 [http-nio-8084-exec-7] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:21:29 [http-nio-8084-exec-7] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 284, size: 8236 bytes +2025-10-29 10:21:30 [http-nio-8084-exec-8] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:21:30 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 285, size: 8236 bytes +2025-10-29 10:21:30 [http-nio-8084-exec-9] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:21:30 [http-nio-8084-exec-9] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 286, size: 8236 bytes +2025-10-29 10:21:30 [http-nio-8084-exec-10] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:21:30 [http-nio-8084-exec-10] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 287, size: 8236 bytes +2025-10-29 10:21:30 [http-nio-8084-exec-1] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:21:30 [http-nio-8084-exec-1] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 288, size: 8236 bytes +2025-10-29 10:21:31 [http-nio-8084-exec-2] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:21:31 [http-nio-8084-exec-2] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 289, size: 8236 bytes +2025-10-29 10:21:31 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:21:31 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - 오디오 청크 없음 - meetingId: test-meeting-001 +2025-10-29 10:21:31 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:21:31 [http-nio-8084-exec-3] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:21:31 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 290, size: 8236 bytes +2025-10-29 10:21:31 [http-nio-8084-exec-4] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:21:31 [http-nio-8084-exec-4] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 291, size: 8236 bytes +2025-10-29 10:21:31 [http-nio-8084-exec-5] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:21:31 [http-nio-8084-exec-5] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 292, size: 8236 bytes +2025-10-29 10:21:32 [http-nio-8084-exec-6] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:21:32 [http-nio-8084-exec-6] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 293, size: 8236 bytes +2025-10-29 10:21:32 [http-nio-8084-exec-7] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:21:32 [http-nio-8084-exec-7] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 294, size: 8236 bytes +2025-10-29 10:21:32 [http-nio-8084-exec-8] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:21:32 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 295, size: 8236 bytes +2025-10-29 10:21:32 [http-nio-8084-exec-9] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:21:32 [http-nio-8084-exec-9] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 296, size: 8236 bytes +2025-10-29 10:21:33 [http-nio-8084-exec-10] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:21:33 [http-nio-8084-exec-10] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 297, size: 8236 bytes +2025-10-29 10:21:33 [http-nio-8084-exec-1] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:21:33 [http-nio-8084-exec-1] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 298, size: 8236 bytes +2025-10-29 10:21:33 [http-nio-8084-exec-2] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:21:33 [http-nio-8084-exec-2] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 299, size: 8236 bytes +2025-10-29 10:21:33 [http-nio-8084-exec-3] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:21:33 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 300, size: 8236 bytes +2025-10-29 10:21:34 [http-nio-8084-exec-4] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:21:34 [http-nio-8084-exec-4] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 301, size: 8236 bytes +2025-10-29 10:21:34 [http-nio-8084-exec-5] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:21:34 [http-nio-8084-exec-5] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 302, size: 8236 bytes +2025-10-29 10:21:34 [http-nio-8084-exec-6] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:21:34 [http-nio-8084-exec-6] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 303, size: 8236 bytes +2025-10-29 10:21:34 [http-nio-8084-exec-7] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:21:34 [http-nio-8084-exec-7] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 304, size: 8236 bytes +2025-10-29 10:21:35 [http-nio-8084-exec-8] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:21:35 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 305, size: 8236 bytes +2025-10-29 10:21:35 [http-nio-8084-exec-9] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:21:35 [http-nio-8084-exec-9] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 306, size: 8236 bytes +2025-10-29 10:21:35 [http-nio-8084-exec-10] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:21:35 [http-nio-8084-exec-10] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 307, size: 8236 bytes +2025-10-29 10:21:35 [http-nio-8084-exec-1] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:21:35 [http-nio-8084-exec-1] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 308, size: 8236 bytes +2025-10-29 10:21:36 [http-nio-8084-exec-2] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:21:36 [http-nio-8084-exec-2] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 309, size: 8236 bytes +2025-10-29 10:21:36 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:21:36 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - 오디오 청크 없음 - meetingId: test-meeting-001 +2025-10-29 10:21:36 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:21:36 [http-nio-8084-exec-3] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:21:36 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 310, size: 8236 bytes +2025-10-29 10:21:36 [http-nio-8084-exec-4] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:21:36 [http-nio-8084-exec-4] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 311, size: 8236 bytes +2025-10-29 10:21:36 [http-nio-8084-exec-5] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:21:36 [http-nio-8084-exec-5] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 312, size: 8236 bytes +2025-10-29 10:21:37 [http-nio-8084-exec-6] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:21:37 [http-nio-8084-exec-6] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 313, size: 8236 bytes +2025-10-29 10:21:37 [http-nio-8084-exec-7] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:21:37 [http-nio-8084-exec-7] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 314, size: 8236 bytes +2025-10-29 10:21:37 [http-nio-8084-exec-8] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:21:37 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 315, size: 8236 bytes +2025-10-29 10:21:38 [http-nio-8084-exec-9] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:21:38 [http-nio-8084-exec-9] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 316, size: 8236 bytes +2025-10-29 10:21:38 [http-nio-8084-exec-10] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:21:38 [http-nio-8084-exec-10] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 317, size: 8236 bytes +2025-10-29 10:21:38 [http-nio-8084-exec-1] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:21:38 [http-nio-8084-exec-1] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 318, size: 8236 bytes +2025-10-29 10:21:38 [http-nio-8084-exec-2] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:21:38 [http-nio-8084-exec-2] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 319, size: 8236 bytes +2025-10-29 10:21:39 [http-nio-8084-exec-3] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:21:39 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 320, size: 8236 bytes +2025-10-29 10:21:39 [http-nio-8084-exec-4] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:21:39 [http-nio-8084-exec-4] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 321, size: 8236 bytes +2025-10-29 10:21:39 [http-nio-8084-exec-5] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:21:39 [http-nio-8084-exec-5] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 322, size: 8236 bytes +2025-10-29 10:21:39 [http-nio-8084-exec-6] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:21:39 [http-nio-8084-exec-6] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 323, size: 8236 bytes +2025-10-29 10:21:40 [http-nio-8084-exec-7] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:21:40 [http-nio-8084-exec-7] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 324, size: 8236 bytes +2025-10-29 10:21:40 [http-nio-8084-exec-8] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:21:40 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 325, size: 8236 bytes +2025-10-29 10:21:40 [http-nio-8084-exec-9] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:21:40 [http-nio-8084-exec-9] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 326, size: 8236 bytes +2025-10-29 10:21:40 [http-nio-8084-exec-10] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:21:40 [http-nio-8084-exec-10] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 327, size: 8236 bytes +2025-10-29 10:21:41 [http-nio-8084-exec-1] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:21:41 [http-nio-8084-exec-1] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 328, size: 8236 bytes +2025-10-29 10:21:41 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:21:41 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - 오디오 청크 없음 - meetingId: test-meeting-001 +2025-10-29 10:21:41 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:21:41 [http-nio-8084-exec-2] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:21:41 [http-nio-8084-exec-2] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 329, size: 8236 bytes +2025-10-29 10:21:41 [http-nio-8084-exec-3] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:21:41 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 330, size: 8236 bytes +2025-10-29 10:21:41 [http-nio-8084-exec-4] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:21:41 [http-nio-8084-exec-4] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 331, size: 8236 bytes +2025-10-29 10:21:42 [http-nio-8084-exec-5] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:21:42 [http-nio-8084-exec-5] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 332, size: 8236 bytes +2025-10-29 10:21:42 [http-nio-8084-exec-6] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:21:42 [http-nio-8084-exec-6] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 333, size: 8236 bytes +2025-10-29 10:21:42 [http-nio-8084-exec-7] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:21:42 [http-nio-8084-exec-7] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 334, size: 8236 bytes +2025-10-29 10:21:42 [http-nio-8084-exec-8] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:21:42 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 335, size: 8236 bytes +2025-10-29 10:21:43 [http-nio-8084-exec-9] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:21:43 [http-nio-8084-exec-9] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 336, size: 8236 bytes +2025-10-29 10:21:43 [http-nio-8084-exec-10] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:21:43 [http-nio-8084-exec-10] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 337, size: 8236 bytes +2025-10-29 10:21:43 [http-nio-8084-exec-1] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:21:43 [http-nio-8084-exec-1] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 338, size: 8236 bytes +2025-10-29 10:21:43 [http-nio-8084-exec-2] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:21:43 [http-nio-8084-exec-2] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 339, size: 8236 bytes +2025-10-29 10:21:44 [http-nio-8084-exec-3] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:21:44 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 340, size: 8236 bytes +2025-10-29 10:21:44 [http-nio-8084-exec-4] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:21:44 [http-nio-8084-exec-4] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 341, size: 8236 bytes +2025-10-29 10:21:44 [http-nio-8084-exec-5] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:21:44 [http-nio-8084-exec-5] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 342, size: 8236 bytes +2025-10-29 10:21:44 [http-nio-8084-exec-6] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:21:44 [http-nio-8084-exec-6] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 343, size: 8236 bytes +2025-10-29 10:21:45 [http-nio-8084-exec-7] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:21:45 [http-nio-8084-exec-7] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 344, size: 8236 bytes +2025-10-29 10:21:45 [http-nio-8084-exec-8] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:21:45 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 345, size: 8236 bytes +2025-10-29 10:21:45 [http-nio-8084-exec-9] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:21:45 [http-nio-8084-exec-9] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 346, size: 8236 bytes +2025-10-29 10:21:45 [http-nio-8084-exec-10] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:21:45 [http-nio-8084-exec-10] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 347, size: 8236 bytes +2025-10-29 10:21:46 [http-nio-8084-exec-1] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:21:46 [http-nio-8084-exec-1] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 348, size: 8236 bytes +2025-10-29 10:21:46 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:21:46 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - 오디오 청크 없음 - meetingId: test-meeting-001 +2025-10-29 10:21:46 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:21:46 [http-nio-8084-exec-2] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:21:46 [http-nio-8084-exec-2] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 349, size: 8236 bytes +2025-10-29 10:21:46 [http-nio-8084-exec-3] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:21:46 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 350, size: 8236 bytes +2025-10-29 10:21:46 [http-nio-8084-exec-4] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:21:46 [http-nio-8084-exec-4] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 351, size: 8236 bytes +2025-10-29 10:21:47 [http-nio-8084-exec-5] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:21:47 [http-nio-8084-exec-5] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 352, size: 8236 bytes +2025-10-29 10:21:47 [http-nio-8084-exec-6] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:21:47 [http-nio-8084-exec-6] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 353, size: 8236 bytes +2025-10-29 10:21:47 [http-nio-8084-exec-7] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:21:47 [http-nio-8084-exec-7] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 354, size: 8236 bytes +2025-10-29 10:21:48 [http-nio-8084-exec-8] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:21:48 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 355, size: 8236 bytes +2025-10-29 10:21:48 [http-nio-8084-exec-9] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:21:48 [http-nio-8084-exec-9] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 356, size: 8236 bytes +2025-10-29 10:21:48 [http-nio-8084-exec-10] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:21:48 [http-nio-8084-exec-10] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 357, size: 8236 bytes +2025-10-29 10:21:48 [http-nio-8084-exec-1] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:21:48 [http-nio-8084-exec-1] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 358, size: 8236 bytes +2025-10-29 10:21:49 [http-nio-8084-exec-2] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:21:49 [http-nio-8084-exec-2] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 359, size: 8236 bytes +2025-10-29 10:21:49 [http-nio-8084-exec-3] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:21:49 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 360, size: 8236 bytes +2025-10-29 10:21:49 [http-nio-8084-exec-4] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:21:49 [http-nio-8084-exec-4] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 361, size: 8236 bytes +2025-10-29 10:21:49 [http-nio-8084-exec-5] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:21:49 [http-nio-8084-exec-5] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 362, size: 8236 bytes +2025-10-29 10:21:50 [http-nio-8084-exec-6] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:21:50 [http-nio-8084-exec-6] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 363, size: 8236 bytes +2025-10-29 10:21:50 [http-nio-8084-exec-7] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:21:50 [http-nio-8084-exec-7] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 364, size: 8236 bytes +2025-10-29 10:21:50 [http-nio-8084-exec-8] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:21:50 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 365, size: 8236 bytes +2025-10-29 10:21:50 [http-nio-8084-exec-9] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:21:50 [http-nio-8084-exec-9] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 366, size: 8236 bytes +2025-10-29 10:21:51 [http-nio-8084-exec-10] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:21:51 [http-nio-8084-exec-10] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 367, size: 8236 bytes +2025-10-29 10:21:51 [http-nio-8084-exec-1] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:21:51 [http-nio-8084-exec-1] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 368, size: 8236 bytes +2025-10-29 10:21:51 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:21:51 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - 오디오 청크 없음 - meetingId: test-meeting-001 +2025-10-29 10:21:51 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:21:51 [http-nio-8084-exec-2] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:21:51 [http-nio-8084-exec-2] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 369, size: 8236 bytes +2025-10-29 10:21:51 [http-nio-8084-exec-3] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:21:51 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 370, size: 8236 bytes +2025-10-29 10:21:52 [http-nio-8084-exec-4] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:21:52 [http-nio-8084-exec-4] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 371, size: 8236 bytes +2025-10-29 10:21:52 [http-nio-8084-exec-5] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:21:52 [http-nio-8084-exec-5] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 372, size: 8236 bytes +2025-10-29 10:21:52 [http-nio-8084-exec-6] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:21:52 [http-nio-8084-exec-6] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 373, size: 8236 bytes +2025-10-29 10:21:52 [http-nio-8084-exec-7] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:21:52 [http-nio-8084-exec-7] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 374, size: 8236 bytes +2025-10-29 10:21:53 [http-nio-8084-exec-8] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:21:53 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 375, size: 8236 bytes +2025-10-29 10:21:53 [http-nio-8084-exec-9] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:21:53 [http-nio-8084-exec-9] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 376, size: 8236 bytes +2025-10-29 10:21:53 [http-nio-8084-exec-10] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:21:53 [http-nio-8084-exec-10] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 377, size: 8236 bytes +2025-10-29 10:21:53 [http-nio-8084-exec-1] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:21:53 [http-nio-8084-exec-1] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 378, size: 8236 bytes +2025-10-29 10:21:54 [http-nio-8084-exec-2] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:21:54 [http-nio-8084-exec-2] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 379, size: 8236 bytes +2025-10-29 10:21:54 [http-nio-8084-exec-3] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:21:54 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 380, size: 8236 bytes +2025-10-29 10:21:54 [http-nio-8084-exec-4] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:21:54 [http-nio-8084-exec-4] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 381, size: 8236 bytes +2025-10-29 10:21:54 [http-nio-8084-exec-5] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:21:54 [http-nio-8084-exec-5] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 382, size: 8236 bytes +2025-10-29 10:21:55 [http-nio-8084-exec-6] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:21:55 [http-nio-8084-exec-6] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 383, size: 8236 bytes +2025-10-29 10:21:55 [http-nio-8084-exec-7] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:21:55 [http-nio-8084-exec-7] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 384, size: 8236 bytes +2025-10-29 10:21:55 [http-nio-8084-exec-8] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:21:55 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 385, size: 8236 bytes +2025-10-29 10:21:55 [http-nio-8084-exec-9] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:21:55 [http-nio-8084-exec-9] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 386, size: 8236 bytes +2025-10-29 10:21:56 [http-nio-8084-exec-10] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:21:56 [http-nio-8084-exec-10] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 387, size: 8236 bytes +2025-10-29 10:21:56 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:21:56 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - 오디오 청크 없음 - meetingId: test-meeting-001 +2025-10-29 10:21:56 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:21:56 [http-nio-8084-exec-1] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:21:56 [http-nio-8084-exec-1] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 388, size: 8236 bytes +2025-10-29 10:21:56 [http-nio-8084-exec-2] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:21:56 [http-nio-8084-exec-2] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 389, size: 8236 bytes +2025-10-29 10:21:56 [http-nio-8084-exec-3] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:21:56 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 390, size: 8236 bytes +2025-10-29 10:21:57 [http-nio-8084-exec-4] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:21:57 [http-nio-8084-exec-4] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 391, size: 8236 bytes +2025-10-29 10:21:57 [http-nio-8084-exec-5] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:21:57 [http-nio-8084-exec-5] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 392, size: 8236 bytes +2025-10-29 10:21:57 [http-nio-8084-exec-6] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:21:57 [http-nio-8084-exec-6] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 393, size: 8236 bytes +2025-10-29 10:21:57 [http-nio-8084-exec-7] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:21:57 [http-nio-8084-exec-7] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 394, size: 8236 bytes +2025-10-29 10:21:58 [http-nio-8084-exec-8] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:21:58 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 395, size: 8236 bytes +2025-10-29 10:21:58 [http-nio-8084-exec-9] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:21:58 [http-nio-8084-exec-9] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 396, size: 8236 bytes +2025-10-29 10:21:58 [http-nio-8084-exec-10] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:21:58 [http-nio-8084-exec-10] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 397, size: 8236 bytes +2025-10-29 10:21:59 [http-nio-8084-exec-1] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:21:59 [http-nio-8084-exec-1] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 398, size: 8236 bytes +2025-10-29 10:21:59 [http-nio-8084-exec-2] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:21:59 [http-nio-8084-exec-2] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 399, size: 8236 bytes +2025-10-29 10:21:59 [http-nio-8084-exec-3] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:21:59 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 400, size: 8236 bytes +2025-10-29 10:21:59 [http-nio-8084-exec-4] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:21:59 [http-nio-8084-exec-4] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 401, size: 8236 bytes +2025-10-29 10:22:00 [http-nio-8084-exec-5] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:22:00 [http-nio-8084-exec-5] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 402, size: 8236 bytes +2025-10-29 10:22:00 [http-nio-8084-exec-6] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:22:00 [http-nio-8084-exec-6] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 403, size: 8236 bytes +2025-10-29 10:22:00 [http-nio-8084-exec-7] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:22:00 [http-nio-8084-exec-7] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 404, size: 8236 bytes +2025-10-29 10:22:00 [http-nio-8084-exec-8] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:22:00 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 405, size: 8236 bytes +2025-10-29 10:22:01 [http-nio-8084-exec-9] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:22:01 [http-nio-8084-exec-9] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 406, size: 8236 bytes +2025-10-29 10:22:01 [http-nio-8084-exec-10] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:22:01 [http-nio-8084-exec-10] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 407, size: 8236 bytes +2025-10-29 10:22:01 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:22:01 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - 오디오 청크 없음 - meetingId: test-meeting-001 +2025-10-29 10:22:01 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:22:01 [http-nio-8084-exec-1] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:22:01 [http-nio-8084-exec-1] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 408, size: 8236 bytes +2025-10-29 10:22:01 [http-nio-8084-exec-2] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:22:01 [http-nio-8084-exec-2] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 409, size: 8236 bytes +2025-10-29 10:22:02 [http-nio-8084-exec-3] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:22:02 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 410, size: 8236 bytes +2025-10-29 10:22:02 [http-nio-8084-exec-4] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:22:02 [http-nio-8084-exec-4] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 411, size: 8236 bytes +2025-10-29 10:22:02 [http-nio-8084-exec-5] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:22:02 [http-nio-8084-exec-5] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 412, size: 8236 bytes +2025-10-29 10:22:02 [http-nio-8084-exec-6] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:22:02 [http-nio-8084-exec-6] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 413, size: 8236 bytes +2025-10-29 10:22:03 [http-nio-8084-exec-7] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:22:03 [http-nio-8084-exec-7] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 414, size: 8236 bytes +2025-10-29 10:22:03 [http-nio-8084-exec-8] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:22:03 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 415, size: 8236 bytes +2025-10-29 10:22:03 [http-nio-8084-exec-9] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:22:03 [http-nio-8084-exec-9] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 416, size: 8236 bytes +2025-10-29 10:22:03 [http-nio-8084-exec-10] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:22:03 [http-nio-8084-exec-10] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 417, size: 8236 bytes +2025-10-29 10:22:04 [http-nio-8084-exec-1] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:22:04 [http-nio-8084-exec-1] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 418, size: 8236 bytes +2025-10-29 10:22:04 [http-nio-8084-exec-2] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:22:04 [http-nio-8084-exec-2] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 419, size: 8236 bytes +2025-10-29 10:22:04 [http-nio-8084-exec-3] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:22:04 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 420, size: 8236 bytes +2025-10-29 10:22:04 [http-nio-8084-exec-4] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:22:04 [http-nio-8084-exec-4] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 421, size: 8236 bytes +2025-10-29 10:22:05 [http-nio-8084-exec-5] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:22:05 [http-nio-8084-exec-5] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 422, size: 8236 bytes +2025-10-29 10:22:05 [http-nio-8084-exec-6] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:22:05 [http-nio-8084-exec-6] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 423, size: 8236 bytes +2025-10-29 10:22:05 [http-nio-8084-exec-7] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:22:05 [http-nio-8084-exec-7] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 424, size: 8236 bytes +2025-10-29 10:22:05 [http-nio-8084-exec-8] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:22:05 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 425, size: 8236 bytes +2025-10-29 10:22:06 [http-nio-8084-exec-9] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:22:06 [http-nio-8084-exec-9] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 426, size: 8236 bytes +2025-10-29 10:22:06 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:22:06 [http-nio-8084-exec-10] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:22:06 [http-nio-8084-exec-10] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 427, size: 8236 bytes +2025-10-29 10:22:06 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - 오디오 청크 없음 - meetingId: test-meeting-001 +2025-10-29 10:22:06 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:22:06 [http-nio-8084-exec-1] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:22:06 [http-nio-8084-exec-1] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 428, size: 8236 bytes +2025-10-29 10:22:06 [http-nio-8084-exec-2] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:22:06 [http-nio-8084-exec-2] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 429, size: 8236 bytes +2025-10-29 10:22:07 [http-nio-8084-exec-3] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:22:07 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 430, size: 8236 bytes +2025-10-29 10:22:07 [http-nio-8084-exec-4] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:22:07 [http-nio-8084-exec-4] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 431, size: 8236 bytes +2025-10-29 10:22:07 [http-nio-8084-exec-5] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:22:07 [http-nio-8084-exec-5] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 432, size: 8236 bytes +2025-10-29 10:22:07 [http-nio-8084-exec-6] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:22:07 [http-nio-8084-exec-6] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 433, size: 8236 bytes +2025-10-29 10:22:08 [http-nio-8084-exec-7] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:22:08 [http-nio-8084-exec-7] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 434, size: 8236 bytes +2025-10-29 10:22:08 [http-nio-8084-exec-8] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:22:08 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 435, size: 8236 bytes +2025-10-29 10:22:08 [http-nio-8084-exec-9] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:22:08 [http-nio-8084-exec-9] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 436, size: 8236 bytes +2025-10-29 10:22:08 [http-nio-8084-exec-10] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:22:08 [http-nio-8084-exec-10] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 437, size: 8236 bytes +2025-10-29 10:22:09 [http-nio-8084-exec-1] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:22:09 [http-nio-8084-exec-1] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 438, size: 8236 bytes +2025-10-29 10:22:09 [http-nio-8084-exec-2] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:22:09 [http-nio-8084-exec-2] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 439, size: 8236 bytes +2025-10-29 10:22:09 [http-nio-8084-exec-3] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:22:09 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 440, size: 8236 bytes +2025-10-29 10:22:10 [http-nio-8084-exec-4] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:22:10 [http-nio-8084-exec-4] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 441, size: 8236 bytes +2025-10-29 10:22:10 [http-nio-8084-exec-5] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:22:10 [http-nio-8084-exec-5] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 442, size: 8236 bytes +2025-10-29 10:22:10 [http-nio-8084-exec-6] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:22:10 [http-nio-8084-exec-6] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 443, size: 8236 bytes +2025-10-29 10:22:10 [http-nio-8084-exec-7] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:22:10 [http-nio-8084-exec-7] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 444, size: 8236 bytes +2025-10-29 10:22:11 [http-nio-8084-exec-8] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:22:11 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 445, size: 8236 bytes +2025-10-29 10:22:11 [http-nio-8084-exec-9] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:22:11 [http-nio-8084-exec-9] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 446, size: 8236 bytes +2025-10-29 10:22:11 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:22:11 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - 오디오 청크 없음 - meetingId: test-meeting-001 +2025-10-29 10:22:11 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:22:11 [http-nio-8084-exec-10] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:22:11 [http-nio-8084-exec-10] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 447, size: 8236 bytes +2025-10-29 10:22:11 [http-nio-8084-exec-1] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:22:11 [http-nio-8084-exec-1] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 448, size: 8236 bytes +2025-10-29 10:22:12 [http-nio-8084-exec-2] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:22:12 [http-nio-8084-exec-2] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 449, size: 8236 bytes +2025-10-29 10:22:12 [http-nio-8084-exec-3] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:22:12 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 450, size: 8236 bytes +2025-10-29 10:22:12 [http-nio-8084-exec-4] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:22:12 [http-nio-8084-exec-4] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 451, size: 8236 bytes +2025-10-29 10:22:12 [http-nio-8084-exec-5] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:22:12 [http-nio-8084-exec-5] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 452, size: 8236 bytes +2025-10-29 10:22:13 [http-nio-8084-exec-6] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:22:13 [http-nio-8084-exec-6] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 453, size: 8236 bytes +2025-10-29 10:22:13 [http-nio-8084-exec-7] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:22:13 [http-nio-8084-exec-7] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 454, size: 8236 bytes +2025-10-29 10:22:13 [http-nio-8084-exec-8] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:22:13 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 455, size: 8236 bytes +2025-10-29 10:22:13 [http-nio-8084-exec-9] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:22:13 [http-nio-8084-exec-9] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 456, size: 8236 bytes +2025-10-29 10:22:14 [http-nio-8084-exec-10] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:22:14 [http-nio-8084-exec-10] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 457, size: 8236 bytes +2025-10-29 10:22:14 [http-nio-8084-exec-1] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:22:14 [http-nio-8084-exec-1] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 458, size: 8236 bytes +2025-10-29 10:22:14 [http-nio-8084-exec-2] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:22:14 [http-nio-8084-exec-2] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 459, size: 8236 bytes +2025-10-29 10:22:14 [http-nio-8084-exec-3] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:22:14 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 460, size: 8236 bytes +2025-10-29 10:22:15 [http-nio-8084-exec-4] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:22:15 [http-nio-8084-exec-4] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 461, size: 8236 bytes +2025-10-29 10:22:15 [http-nio-8084-exec-5] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:22:15 [http-nio-8084-exec-5] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 462, size: 8236 bytes +2025-10-29 10:22:15 [http-nio-8084-exec-6] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:22:15 [http-nio-8084-exec-6] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 463, size: 8236 bytes +2025-10-29 10:22:15 [http-nio-8084-exec-7] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:22:15 [http-nio-8084-exec-7] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 464, size: 8236 bytes +2025-10-29 10:22:16 [http-nio-8084-exec-8] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:22:16 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 465, size: 8236 bytes +2025-10-29 10:22:16 [http-nio-8084-exec-9] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:22:16 [http-nio-8084-exec-9] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 466, size: 8236 bytes +2025-10-29 10:22:16 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:22:16 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - 오디오 청크 없음 - meetingId: test-meeting-001 +2025-10-29 10:22:16 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:22:16 [http-nio-8084-exec-10] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:22:16 [http-nio-8084-exec-10] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 467, size: 8236 bytes +2025-10-29 10:22:16 [http-nio-8084-exec-1] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:22:16 [http-nio-8084-exec-1] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 468, size: 8236 bytes +2025-10-29 10:22:17 [http-nio-8084-exec-2] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:22:17 [http-nio-8084-exec-2] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 469, size: 8236 bytes +2025-10-29 10:22:17 [http-nio-8084-exec-3] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:22:17 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 470, size: 8236 bytes +2025-10-29 10:22:17 [http-nio-8084-exec-4] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:22:17 [http-nio-8084-exec-4] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 471, size: 8236 bytes +2025-10-29 10:22:17 [http-nio-8084-exec-5] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:22:17 [http-nio-8084-exec-5] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 472, size: 8236 bytes +2025-10-29 10:22:18 [http-nio-8084-exec-6] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:22:18 [http-nio-8084-exec-6] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 473, size: 8236 bytes +2025-10-29 10:22:18 [http-nio-8084-exec-7] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:22:18 [http-nio-8084-exec-7] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 474, size: 8236 bytes +2025-10-29 10:22:18 [http-nio-8084-exec-8] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:22:18 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 475, size: 8236 bytes +2025-10-29 10:22:18 [http-nio-8084-exec-9] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:22:18 [http-nio-8084-exec-9] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 476, size: 8236 bytes +2025-10-29 10:22:19 [http-nio-8084-exec-10] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:22:19 [http-nio-8084-exec-10] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 477, size: 8236 bytes +2025-10-29 10:22:19 [http-nio-8084-exec-1] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:22:19 [http-nio-8084-exec-1] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 478, size: 8236 bytes +2025-10-29 10:22:19 [http-nio-8084-exec-2] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:22:19 [http-nio-8084-exec-2] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 479, size: 8236 bytes +2025-10-29 10:22:19 [http-nio-8084-exec-3] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:22:19 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 480, size: 8236 bytes +2025-10-29 10:22:20 [http-nio-8084-exec-4] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:22:20 [http-nio-8084-exec-4] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 481, size: 8236 bytes +2025-10-29 10:22:20 [http-nio-8084-exec-5] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:22:20 [http-nio-8084-exec-5] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 482, size: 8236 bytes +2025-10-29 10:22:20 [http-nio-8084-exec-6] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:22:20 [http-nio-8084-exec-6] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 483, size: 8236 bytes +2025-10-29 10:22:21 [http-nio-8084-exec-7] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:22:21 [http-nio-8084-exec-7] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 484, size: 8236 bytes +2025-10-29 10:22:21 [http-nio-8084-exec-8] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:22:21 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 485, size: 8236 bytes +2025-10-29 10:22:21 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:22:21 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - 오디오 청크 없음 - meetingId: test-meeting-001 +2025-10-29 10:22:21 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:22:21 [http-nio-8084-exec-9] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:22:21 [http-nio-8084-exec-9] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 486, size: 8236 bytes +2025-10-29 10:22:21 [http-nio-8084-exec-10] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:22:21 [http-nio-8084-exec-10] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 487, size: 8236 bytes +2025-10-29 10:22:22 [http-nio-8084-exec-1] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:22:22 [http-nio-8084-exec-1] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 488, size: 8236 bytes +2025-10-29 10:22:22 [http-nio-8084-exec-2] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:22:22 [http-nio-8084-exec-2] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 489, size: 8236 bytes +2025-10-29 10:22:22 [http-nio-8084-exec-3] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:22:22 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 490, size: 8236 bytes +2025-10-29 10:22:22 [http-nio-8084-exec-4] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:22:22 [http-nio-8084-exec-4] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 491, size: 8236 bytes +2025-10-29 10:22:23 [http-nio-8084-exec-5] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:22:23 [http-nio-8084-exec-5] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 492, size: 8236 bytes +2025-10-29 10:22:23 [http-nio-8084-exec-6] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:22:23 [http-nio-8084-exec-6] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 493, size: 8236 bytes +2025-10-29 10:22:23 [http-nio-8084-exec-7] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:22:23 [http-nio-8084-exec-7] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 494, size: 8236 bytes +2025-10-29 10:22:23 [http-nio-8084-exec-8] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:22:23 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 495, size: 8236 bytes +2025-10-29 10:22:24 [http-nio-8084-exec-9] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:22:24 [http-nio-8084-exec-9] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 496, size: 8236 bytes +2025-10-29 10:22:24 [http-nio-8084-exec-10] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:22:24 [http-nio-8084-exec-10] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 497, size: 8236 bytes +2025-10-29 10:22:24 [http-nio-8084-exec-1] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:22:24 [http-nio-8084-exec-1] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 498, size: 8236 bytes +2025-10-29 10:22:24 [http-nio-8084-exec-2] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:22:24 [http-nio-8084-exec-2] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 499, size: 8236 bytes +2025-10-29 10:22:25 [http-nio-8084-exec-3] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:22:25 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 500, size: 8236 bytes +2025-10-29 10:22:25 [http-nio-8084-exec-4] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:22:25 [http-nio-8084-exec-4] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 501, size: 8236 bytes +2025-10-29 10:22:25 [http-nio-8084-exec-5] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:22:25 [http-nio-8084-exec-5] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 502, size: 8236 bytes +2025-10-29 10:22:25 [http-nio-8084-exec-6] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:22:25 [http-nio-8084-exec-6] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 503, size: 8236 bytes +2025-10-29 10:22:26 [http-nio-8084-exec-7] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:22:26 [http-nio-8084-exec-7] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 504, size: 8236 bytes +2025-10-29 10:22:26 [http-nio-8084-exec-8] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:22:26 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 505, size: 8236 bytes +2025-10-29 10:22:26 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:22:26 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - 오디오 청크 없음 - meetingId: test-meeting-001 +2025-10-29 10:22:26 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:22:26 [http-nio-8084-exec-9] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:22:26 [http-nio-8084-exec-9] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 506, size: 8236 bytes +2025-10-29 10:22:26 [http-nio-8084-exec-10] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:22:26 [http-nio-8084-exec-10] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 507, size: 8236 bytes +2025-10-29 10:22:27 [http-nio-8084-exec-1] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:22:27 [http-nio-8084-exec-1] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 508, size: 8236 bytes +2025-10-29 10:22:27 [http-nio-8084-exec-2] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:22:27 [http-nio-8084-exec-2] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 509, size: 8236 bytes +2025-10-29 10:22:27 [http-nio-8084-exec-3] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:22:27 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 510, size: 8236 bytes +2025-10-29 10:22:27 [http-nio-8084-exec-4] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:22:27 [http-nio-8084-exec-4] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 511, size: 8236 bytes +2025-10-29 10:22:28 [http-nio-8084-exec-5] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:22:28 [http-nio-8084-exec-5] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 512, size: 8236 bytes +2025-10-29 10:22:28 [http-nio-8084-exec-6] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:22:28 [http-nio-8084-exec-6] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 513, size: 8236 bytes +2025-10-29 10:22:28 [http-nio-8084-exec-7] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:22:28 [http-nio-8084-exec-7] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 514, size: 8236 bytes +2025-10-29 10:22:28 [http-nio-8084-exec-8] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:22:28 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 515, size: 8236 bytes +2025-10-29 10:22:29 [http-nio-8084-exec-9] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:22:29 [http-nio-8084-exec-9] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 516, size: 8236 bytes +2025-10-29 10:22:29 [http-nio-8084-exec-10] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:22:29 [http-nio-8084-exec-10] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 517, size: 8236 bytes +2025-10-29 10:22:29 [http-nio-8084-exec-1] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:22:29 [http-nio-8084-exec-1] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 518, size: 8236 bytes +2025-10-29 10:22:29 [http-nio-8084-exec-2] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:22:29 [http-nio-8084-exec-2] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 519, size: 8236 bytes +2025-10-29 10:22:30 [http-nio-8084-exec-3] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:22:30 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 520, size: 8236 bytes +2025-10-29 10:22:30 [http-nio-8084-exec-4] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:22:30 [http-nio-8084-exec-4] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 521, size: 8236 bytes +2025-10-29 10:22:30 [http-nio-8084-exec-5] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:22:30 [http-nio-8084-exec-5] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 522, size: 8236 bytes +2025-10-29 10:22:30 [http-nio-8084-exec-6] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:22:30 [http-nio-8084-exec-6] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 523, size: 8236 bytes +2025-10-29 10:22:31 [http-nio-8084-exec-7] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:22:31 [http-nio-8084-exec-7] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 524, size: 8236 bytes +2025-10-29 10:22:31 [http-nio-8084-exec-8] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:22:31 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 525, size: 8236 bytes +2025-10-29 10:22:31 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:22:31 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - 오디오 청크 없음 - meetingId: test-meeting-001 +2025-10-29 10:22:31 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:22:31 [http-nio-8084-exec-9] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:22:31 [http-nio-8084-exec-9] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 526, size: 8236 bytes +2025-10-29 10:22:32 [http-nio-8084-exec-10] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:22:32 [http-nio-8084-exec-10] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 527, size: 8236 bytes +2025-10-29 10:22:32 [http-nio-8084-exec-1] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:22:32 [http-nio-8084-exec-1] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 528, size: 8236 bytes +2025-10-29 10:22:32 [http-nio-8084-exec-2] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:22:32 [http-nio-8084-exec-2] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 529, size: 8236 bytes +2025-10-29 10:22:32 [http-nio-8084-exec-3] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:22:32 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 530, size: 8236 bytes +2025-10-29 10:22:33 [http-nio-8084-exec-4] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:22:33 [http-nio-8084-exec-4] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 531, size: 8236 bytes +2025-10-29 10:22:33 [http-nio-8084-exec-5] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:22:33 [http-nio-8084-exec-5] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 532, size: 8236 bytes +2025-10-29 10:22:33 [http-nio-8084-exec-6] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:22:33 [http-nio-8084-exec-6] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 533, size: 8236 bytes +2025-10-29 10:22:33 [http-nio-8084-exec-7] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:22:33 [http-nio-8084-exec-7] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 534, size: 8236 bytes +2025-10-29 10:22:34 [http-nio-8084-exec-8] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:22:34 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 535, size: 8236 bytes +2025-10-29 10:22:34 [http-nio-8084-exec-9] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:22:34 [http-nio-8084-exec-9] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 536, size: 8236 bytes +2025-10-29 10:22:34 [http-nio-8084-exec-10] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:22:34 [http-nio-8084-exec-10] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 537, size: 8236 bytes +2025-10-29 10:22:34 [http-nio-8084-exec-1] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:22:34 [http-nio-8084-exec-1] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 538, size: 8236 bytes +2025-10-29 10:22:35 [http-nio-8084-exec-2] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:22:35 [http-nio-8084-exec-2] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 539, size: 8236 bytes +2025-10-29 10:22:35 [http-nio-8084-exec-3] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:22:35 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 540, size: 8236 bytes +2025-10-29 10:22:35 [http-nio-8084-exec-4] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:22:35 [http-nio-8084-exec-4] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 541, size: 8236 bytes +2025-10-29 10:22:35 [http-nio-8084-exec-5] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:22:35 [http-nio-8084-exec-5] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 542, size: 8236 bytes +2025-10-29 10:22:36 [http-nio-8084-exec-6] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:22:36 [http-nio-8084-exec-6] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 543, size: 8236 bytes +2025-10-29 10:22:36 [http-nio-8084-exec-7] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:22:36 [http-nio-8084-exec-7] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 544, size: 8236 bytes +2025-10-29 10:22:36 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:22:36 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - 오디오 청크 없음 - meetingId: test-meeting-001 +2025-10-29 10:22:36 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:22:36 [http-nio-8084-exec-8] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:22:36 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 545, size: 8236 bytes +2025-10-29 10:22:36 [http-nio-8084-exec-9] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:22:36 [http-nio-8084-exec-9] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 546, size: 8236 bytes +2025-10-29 10:22:37 [http-nio-8084-exec-10] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:22:37 [http-nio-8084-exec-10] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 547, size: 8236 bytes +2025-10-29 10:22:37 [http-nio-8084-exec-1] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:22:37 [http-nio-8084-exec-1] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 548, size: 8236 bytes +2025-10-29 10:22:37 [http-nio-8084-exec-2] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:22:37 [http-nio-8084-exec-2] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 549, size: 8236 bytes +2025-10-29 10:22:37 [http-nio-8084-exec-3] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:22:37 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 550, size: 8236 bytes +2025-10-29 10:22:38 [http-nio-8084-exec-4] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:22:38 [http-nio-8084-exec-4] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 551, size: 8236 bytes +2025-10-29 10:22:38 [http-nio-8084-exec-5] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:22:38 [http-nio-8084-exec-5] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 552, size: 8236 bytes +2025-10-29 10:22:38 [http-nio-8084-exec-6] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:22:38 [http-nio-8084-exec-6] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 553, size: 8236 bytes +2025-10-29 10:22:38 [http-nio-8084-exec-7] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:22:38 [http-nio-8084-exec-7] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 554, size: 8236 bytes +2025-10-29 10:22:39 [http-nio-8084-exec-8] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:22:39 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 555, size: 8236 bytes +2025-10-29 10:22:39 [http-nio-8084-exec-9] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:22:39 [http-nio-8084-exec-9] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 556, size: 8236 bytes +2025-10-29 10:22:39 [http-nio-8084-exec-10] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:22:39 [http-nio-8084-exec-10] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 557, size: 8236 bytes +2025-10-29 10:22:39 [http-nio-8084-exec-1] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:22:39 [http-nio-8084-exec-1] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 558, size: 8236 bytes +2025-10-29 10:22:40 [http-nio-8084-exec-2] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:22:40 [http-nio-8084-exec-2] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 559, size: 8236 bytes +2025-10-29 10:22:40 [http-nio-8084-exec-3] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:22:40 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 560, size: 8236 bytes +2025-10-29 10:22:40 [http-nio-8084-exec-4] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:22:40 [http-nio-8084-exec-4] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 561, size: 8236 bytes +2025-10-29 10:22:40 [http-nio-8084-exec-5] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:22:40 [http-nio-8084-exec-5] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 562, size: 8236 bytes +2025-10-29 10:22:41 [http-nio-8084-exec-6] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:22:41 [http-nio-8084-exec-6] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 563, size: 8236 bytes +2025-10-29 10:22:41 [http-nio-8084-exec-7] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:22:41 [http-nio-8084-exec-7] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 564, size: 8236 bytes +2025-10-29 10:22:41 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:22:41 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - 오디오 청크 없음 - meetingId: test-meeting-001 +2025-10-29 10:22:41 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:22:41 [http-nio-8084-exec-8] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:22:41 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 565, size: 8236 bytes +2025-10-29 10:22:42 [http-nio-8084-exec-9] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:22:42 [http-nio-8084-exec-9] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 566, size: 8236 bytes +2025-10-29 10:22:42 [http-nio-8084-exec-10] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:22:42 [http-nio-8084-exec-10] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 567, size: 8236 bytes +2025-10-29 10:22:42 [http-nio-8084-exec-1] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:22:42 [http-nio-8084-exec-1] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 568, size: 8236 bytes +2025-10-29 10:22:42 [http-nio-8084-exec-2] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:22:42 [http-nio-8084-exec-2] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 569, size: 8236 bytes +2025-10-29 10:22:43 [http-nio-8084-exec-3] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:22:43 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 570, size: 8236 bytes +2025-10-29 10:22:43 [http-nio-8084-exec-4] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:22:43 [http-nio-8084-exec-4] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 571, size: 8236 bytes +2025-10-29 10:22:43 [http-nio-8084-exec-5] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:22:43 [http-nio-8084-exec-5] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 572, size: 8236 bytes +2025-10-29 10:22:43 [http-nio-8084-exec-6] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:22:43 [http-nio-8084-exec-6] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 573, size: 8236 bytes +2025-10-29 10:22:44 [http-nio-8084-exec-7] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:22:44 [http-nio-8084-exec-7] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 574, size: 8236 bytes +2025-10-29 10:22:44 [http-nio-8084-exec-8] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:22:44 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 575, size: 8236 bytes +2025-10-29 10:22:44 [http-nio-8084-exec-9] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:22:44 [http-nio-8084-exec-9] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 576, size: 8236 bytes +2025-10-29 10:22:44 [http-nio-8084-exec-10] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:22:44 [http-nio-8084-exec-10] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 577, size: 8236 bytes +2025-10-29 10:22:45 [http-nio-8084-exec-1] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:22:45 [http-nio-8084-exec-1] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 578, size: 8236 bytes +2025-10-29 10:22:45 [http-nio-8084-exec-2] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:22:45 [http-nio-8084-exec-2] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 579, size: 8236 bytes +2025-10-29 10:22:45 [http-nio-8084-exec-3] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:22:45 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 580, size: 8236 bytes +2025-10-29 10:22:45 [http-nio-8084-exec-4] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:22:45 [http-nio-8084-exec-4] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 581, size: 8236 bytes +2025-10-29 10:22:46 [http-nio-8084-exec-5] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:22:46 [http-nio-8084-exec-5] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 582, size: 8236 bytes +2025-10-29 10:22:46 [http-nio-8084-exec-6] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:22:46 [http-nio-8084-exec-6] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 583, size: 8236 bytes +2025-10-29 10:22:46 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:22:46 [http-nio-8084-exec-7] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:22:46 [http-nio-8084-exec-7] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 584, size: 8236 bytes +2025-10-29 10:22:46 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - 오디오 청크 없음 - meetingId: test-meeting-001 +2025-10-29 10:22:46 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:22:46 [http-nio-8084-exec-8] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:22:46 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 585, size: 8236 bytes +2025-10-29 10:22:47 [http-nio-8084-exec-9] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:22:47 [http-nio-8084-exec-9] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 586, size: 8236 bytes +2025-10-29 10:22:47 [http-nio-8084-exec-10] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:22:47 [http-nio-8084-exec-10] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 587, size: 8236 bytes +2025-10-29 10:22:47 [http-nio-8084-exec-1] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:22:47 [http-nio-8084-exec-1] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 588, size: 8236 bytes +2025-10-29 10:22:47 [http-nio-8084-exec-2] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:22:47 [http-nio-8084-exec-2] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 589, size: 8236 bytes +2025-10-29 10:22:48 [http-nio-8084-exec-3] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:22:48 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 590, size: 8236 bytes +2025-10-29 10:22:48 [http-nio-8084-exec-4] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:22:48 [http-nio-8084-exec-4] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 591, size: 8236 bytes +2025-10-29 10:22:48 [http-nio-8084-exec-5] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:22:48 [http-nio-8084-exec-5] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 592, size: 8236 bytes +2025-10-29 10:22:48 [http-nio-8084-exec-6] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:22:48 [http-nio-8084-exec-6] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 593, size: 8236 bytes +2025-10-29 10:22:49 [http-nio-8084-exec-7] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:22:49 [http-nio-8084-exec-7] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 594, size: 8236 bytes +2025-10-29 10:22:49 [http-nio-8084-exec-8] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:22:49 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 595, size: 8236 bytes +2025-10-29 10:22:49 [http-nio-8084-exec-9] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:22:49 [http-nio-8084-exec-9] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 596, size: 8236 bytes +2025-10-29 10:22:49 [http-nio-8084-exec-10] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:22:49 [http-nio-8084-exec-10] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 597, size: 8236 bytes +2025-10-29 10:22:50 [http-nio-8084-exec-1] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:22:50 [http-nio-8084-exec-1] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 598, size: 8236 bytes +2025-10-29 10:22:50 [http-nio-8084-exec-2] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:22:50 [http-nio-8084-exec-2] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 599, size: 8236 bytes +2025-10-29 10:22:50 [http-nio-8084-exec-3] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:22:50 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 600, size: 8236 bytes +2025-10-29 10:22:50 [http-nio-8084-exec-4] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:22:50 [http-nio-8084-exec-4] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 601, size: 8236 bytes +2025-10-29 10:22:51 [http-nio-8084-exec-5] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:22:51 [http-nio-8084-exec-5] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 602, size: 8236 bytes +2025-10-29 10:22:51 [http-nio-8084-exec-6] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:22:51 [http-nio-8084-exec-6] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 603, size: 8236 bytes +2025-10-29 10:22:51 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:22:51 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - 오디오 청크 없음 - meetingId: test-meeting-001 +2025-10-29 10:22:51 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:22:51 [http-nio-8084-exec-7] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:22:51 [http-nio-8084-exec-7] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 604, size: 8236 bytes +2025-10-29 10:22:52 [http-nio-8084-exec-8] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:22:52 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 605, size: 8236 bytes +2025-10-29 10:22:52 [http-nio-8084-exec-9] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:22:52 [http-nio-8084-exec-9] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 606, size: 8236 bytes +2025-10-29 10:22:52 [http-nio-8084-exec-10] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:22:52 [http-nio-8084-exec-10] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 607, size: 8236 bytes +2025-10-29 10:22:52 [http-nio-8084-exec-1] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:22:52 [http-nio-8084-exec-1] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 608, size: 8236 bytes +2025-10-29 10:22:53 [http-nio-8084-exec-2] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:22:53 [http-nio-8084-exec-2] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 609, size: 8236 bytes +2025-10-29 10:22:53 [http-nio-8084-exec-2] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:22:53 [http-nio-8084-exec-2] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 610, size: 8236 bytes +2025-10-29 10:22:53 [http-nio-8084-exec-2] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:22:53 [http-nio-8084-exec-2] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 611, size: 8236 bytes +2025-10-29 10:22:53 [http-nio-8084-exec-2] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:22:53 [http-nio-8084-exec-2] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 612, size: 8236 bytes +2025-10-29 10:22:54 [http-nio-8084-exec-3] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:22:54 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 613, size: 8236 bytes +2025-10-29 10:22:54 [http-nio-8084-exec-4] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:22:54 [http-nio-8084-exec-4] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 614, size: 8236 bytes +2025-10-29 10:22:54 [http-nio-8084-exec-4] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:22:54 [http-nio-8084-exec-4] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 615, size: 8236 bytes +2025-10-29 10:22:54 [http-nio-8084-exec-5] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:22:54 [http-nio-8084-exec-5] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 616, size: 8236 bytes +2025-10-29 10:22:55 [http-nio-8084-exec-6] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:22:55 [http-nio-8084-exec-6] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 617, size: 8236 bytes +2025-10-29 10:22:55 [http-nio-8084-exec-7] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:22:55 [http-nio-8084-exec-7] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 618, size: 8236 bytes +2025-10-29 10:22:55 [http-nio-8084-exec-8] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:22:55 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 619, size: 8236 bytes +2025-10-29 10:22:55 [http-nio-8084-exec-9] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:22:55 [http-nio-8084-exec-9] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 620, size: 8236 bytes +2025-10-29 10:22:56 [http-nio-8084-exec-10] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:22:56 [http-nio-8084-exec-10] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 621, size: 8236 bytes +2025-10-29 10:22:56 [http-nio-8084-exec-1] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:22:56 [http-nio-8084-exec-1] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 622, size: 8236 bytes +2025-10-29 10:22:56 [http-nio-8084-exec-2] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:22:56 [http-nio-8084-exec-2] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 623, size: 8236 bytes +2025-10-29 10:22:56 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:22:56 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - 오디오 청크 없음 - meetingId: test-meeting-001 +2025-10-29 10:22:56 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:22:56 [http-nio-8084-exec-3] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:22:56 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 624, size: 8236 bytes +2025-10-29 10:22:57 [http-nio-8084-exec-4] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:22:57 [http-nio-8084-exec-4] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 625, size: 8236 bytes +2025-10-29 10:22:57 [http-nio-8084-exec-5] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:22:57 [http-nio-8084-exec-5] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 626, size: 8236 bytes +2025-10-29 10:22:58 [http-nio-8084-exec-6] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:22:58 [http-nio-8084-exec-6] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 627, size: 8236 bytes +2025-10-29 10:22:58 [http-nio-8084-exec-6] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:22:58 [http-nio-8084-exec-6] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 628, size: 8236 bytes +2025-10-29 10:22:58 [http-nio-8084-exec-7] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:22:58 [http-nio-8084-exec-7] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 629, size: 8236 bytes +2025-10-29 10:22:58 [http-nio-8084-exec-8] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:22:58 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 630, size: 8236 bytes +2025-10-29 10:22:58 [http-nio-8084-exec-9] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:22:58 [http-nio-8084-exec-9] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 631, size: 8236 bytes +2025-10-29 10:22:58 [http-nio-8084-exec-10] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:22:58 [http-nio-8084-exec-10] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 632, size: 8236 bytes +2025-10-29 10:22:59 [http-nio-8084-exec-1] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:22:59 [http-nio-8084-exec-1] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 633, size: 8236 bytes +2025-10-29 10:22:59 [http-nio-8084-exec-2] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:22:59 [http-nio-8084-exec-2] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 634, size: 8236 bytes +2025-10-29 10:22:59 [http-nio-8084-exec-3] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:22:59 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 635, size: 8236 bytes +2025-10-29 10:22:59 [http-nio-8084-exec-4] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:22:59 [http-nio-8084-exec-4] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 636, size: 8236 bytes +2025-10-29 10:23:00 [http-nio-8084-exec-5] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:23:00 [http-nio-8084-exec-5] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 637, size: 8236 bytes +2025-10-29 10:23:00 [http-nio-8084-exec-6] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:23:00 [http-nio-8084-exec-6] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 638, size: 8236 bytes +2025-10-29 10:23:00 [http-nio-8084-exec-7] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:23:00 [http-nio-8084-exec-7] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 639, size: 8236 bytes +2025-10-29 10:23:01 [http-nio-8084-exec-8] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:23:01 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 640, size: 8236 bytes +2025-10-29 10:23:01 [http-nio-8084-exec-8] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:23:01 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 641, size: 8236 bytes +2025-10-29 10:23:01 [http-nio-8084-exec-8] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:23:01 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 642, size: 8236 bytes +2025-10-29 10:23:01 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:23:01 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - 오디오 청크 없음 - meetingId: test-meeting-001 +2025-10-29 10:23:01 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:23:01 [http-nio-8084-exec-9] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:23:01 [http-nio-8084-exec-9] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 643, size: 8236 bytes +2025-10-29 10:23:02 [http-nio-8084-exec-10] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:23:02 [http-nio-8084-exec-10] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 644, size: 8236 bytes +2025-10-29 10:23:02 [http-nio-8084-exec-10] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:23:02 [http-nio-8084-exec-10] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 645, size: 8236 bytes +2025-10-29 10:23:02 [http-nio-8084-exec-1] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:23:02 [http-nio-8084-exec-1] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 646, size: 8236 bytes +2025-10-29 10:23:02 [http-nio-8084-exec-2] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:23:02 [http-nio-8084-exec-2] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 647, size: 8236 bytes +2025-10-29 10:23:03 [http-nio-8084-exec-3] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:23:03 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 648, size: 8236 bytes +2025-10-29 10:23:03 [http-nio-8084-exec-4] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:23:03 [http-nio-8084-exec-4] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 649, size: 8236 bytes +2025-10-29 10:23:03 [http-nio-8084-exec-5] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:23:03 [http-nio-8084-exec-5] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 650, size: 8236 bytes +2025-10-29 10:23:04 [http-nio-8084-exec-6] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:23:04 [http-nio-8084-exec-6] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 651, size: 8236 bytes +2025-10-29 10:23:04 [http-nio-8084-exec-6] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:23:04 [http-nio-8084-exec-6] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 652, size: 8236 bytes +2025-10-29 10:23:04 [http-nio-8084-exec-6] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:23:04 [http-nio-8084-exec-6] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 653, size: 8236 bytes +2025-10-29 10:23:04 [http-nio-8084-exec-7] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:23:04 [http-nio-8084-exec-7] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 654, size: 8236 bytes +2025-10-29 10:23:04 [http-nio-8084-exec-8] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:23:04 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 655, size: 8236 bytes +2025-10-29 10:23:05 [http-nio-8084-exec-9] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:23:05 [http-nio-8084-exec-9] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 656, size: 8236 bytes +2025-10-29 10:23:05 [http-nio-8084-exec-10] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:23:05 [http-nio-8084-exec-10] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 657, size: 8236 bytes +2025-10-29 10:23:05 [http-nio-8084-exec-1] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:23:05 [http-nio-8084-exec-1] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 658, size: 8236 bytes +2025-10-29 10:23:05 [http-nio-8084-exec-2] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:23:05 [http-nio-8084-exec-2] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 659, size: 8236 bytes +2025-10-29 10:23:06 [http-nio-8084-exec-3] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:23:06 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 660, size: 8236 bytes +2025-10-29 10:23:06 [http-nio-8084-exec-4] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:23:06 [http-nio-8084-exec-4] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 661, size: 8236 bytes +2025-10-29 10:23:06 [http-nio-8084-exec-5] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:23:06 [http-nio-8084-exec-5] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 662, size: 8236 bytes +2025-10-29 10:23:06 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:23:06 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - 오디오 청크 없음 - meetingId: test-meeting-001 +2025-10-29 10:23:06 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:23:06 [http-nio-8084-exec-6] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:23:06 [http-nio-8084-exec-6] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 663, size: 8236 bytes +2025-10-29 10:23:07 [http-nio-8084-exec-7] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:23:07 [http-nio-8084-exec-7] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 664, size: 8236 bytes +2025-10-29 10:23:07 [http-nio-8084-exec-8] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:23:07 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 665, size: 8236 bytes +2025-10-29 10:23:07 [http-nio-8084-exec-9] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:23:07 [http-nio-8084-exec-9] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 666, size: 8236 bytes +2025-10-29 10:23:07 [http-nio-8084-exec-10] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:23:07 [http-nio-8084-exec-10] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 667, size: 8236 bytes +2025-10-29 10:23:08 [http-nio-8084-exec-1] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:23:08 [http-nio-8084-exec-1] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 668, size: 8236 bytes +2025-10-29 10:23:08 [http-nio-8084-exec-2] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:23:08 [http-nio-8084-exec-2] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 669, size: 8236 bytes +2025-10-29 10:23:08 [http-nio-8084-exec-3] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:23:08 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 670, size: 8236 bytes +2025-10-29 10:23:08 [http-nio-8084-exec-4] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:23:08 [http-nio-8084-exec-4] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 671, size: 8236 bytes +2025-10-29 10:23:09 [http-nio-8084-exec-5] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:23:09 [http-nio-8084-exec-5] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 672, size: 8236 bytes +2025-10-29 10:23:09 [http-nio-8084-exec-6] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:23:09 [http-nio-8084-exec-6] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 673, size: 8236 bytes +2025-10-29 10:23:09 [http-nio-8084-exec-7] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:23:09 [http-nio-8084-exec-7] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 674, size: 8236 bytes +2025-10-29 10:23:10 [http-nio-8084-exec-8] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:23:10 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 675, size: 8236 bytes +2025-10-29 10:23:10 [http-nio-8084-exec-9] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:23:10 [http-nio-8084-exec-9] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 676, size: 8236 bytes +2025-10-29 10:23:10 [http-nio-8084-exec-9] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:23:10 [http-nio-8084-exec-9] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 677, size: 8236 bytes +2025-10-29 10:23:10 [http-nio-8084-exec-10] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:23:10 [http-nio-8084-exec-10] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 678, size: 8236 bytes +2025-10-29 10:23:11 [http-nio-8084-exec-1] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:23:11 [http-nio-8084-exec-1] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 679, size: 8236 bytes +2025-10-29 10:23:12 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:23:12 [http-nio-8084-exec-1] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:23:12 [http-nio-8084-exec-1] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 680, size: 8236 bytes +2025-10-29 10:23:12 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - 오디오 청크 없음 - meetingId: test-meeting-001 +2025-10-29 10:23:12 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:23:12 [http-nio-8084-exec-1] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:23:12 [http-nio-8084-exec-1] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 681, size: 8236 bytes +2025-10-29 10:23:12 [http-nio-8084-exec-1] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:23:12 [http-nio-8084-exec-1] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 682, size: 8236 bytes +2025-10-29 10:23:12 [http-nio-8084-exec-1] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:23:12 [http-nio-8084-exec-1] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 683, size: 8236 bytes +2025-10-29 10:23:12 [http-nio-8084-exec-1] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:23:12 [http-nio-8084-exec-1] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 684, size: 8236 bytes +2025-10-29 10:23:12 [http-nio-8084-exec-1] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:23:12 [http-nio-8084-exec-1] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 685, size: 8236 bytes +2025-10-29 10:23:12 [http-nio-8084-exec-2] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:23:12 [http-nio-8084-exec-2] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 686, size: 8236 bytes +2025-10-29 10:23:12 [http-nio-8084-exec-3] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:23:12 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 687, size: 8236 bytes +2025-10-29 10:23:13 [http-nio-8084-exec-4] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:23:13 [http-nio-8084-exec-4] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 688, size: 8236 bytes +2025-10-29 10:23:13 [http-nio-8084-exec-5] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:23:13 [http-nio-8084-exec-5] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 689, size: 8236 bytes +2025-10-29 10:23:13 [http-nio-8084-exec-6] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:23:13 [http-nio-8084-exec-6] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 690, size: 8236 bytes +2025-10-29 10:23:14 [http-nio-8084-exec-7] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:23:14 [http-nio-8084-exec-7] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 691, size: 8236 bytes +2025-10-29 10:23:14 [http-nio-8084-exec-8] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:23:14 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 692, size: 8236 bytes +2025-10-29 10:23:16 [http-nio-8084-exec-9] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:23:16 [http-nio-8084-exec-9] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 693, size: 8236 bytes +2025-10-29 10:23:16 [http-nio-8084-exec-9] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:23:16 [http-nio-8084-exec-9] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 694, size: 8236 bytes +2025-10-29 10:23:16 [http-nio-8084-exec-9] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:23:16 [http-nio-8084-exec-9] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 695, size: 8236 bytes +2025-10-29 10:23:16 [http-nio-8084-exec-9] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:23:16 [http-nio-8084-exec-9] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 696, size: 8236 bytes +2025-10-29 10:23:16 [http-nio-8084-exec-9] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:23:16 [http-nio-8084-exec-9] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 697, size: 8236 bytes +2025-10-29 10:23:16 [http-nio-8084-exec-9] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:23:16 [http-nio-8084-exec-9] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 698, size: 8236 bytes +2025-10-29 10:23:17 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:23:17 [http-nio-8084-exec-9] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:23:17 [http-nio-8084-exec-9] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 699, size: 8236 bytes +2025-10-29 10:23:17 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - 오디오 청크 없음 - meetingId: test-meeting-001 +2025-10-29 10:23:17 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:23:17 [http-nio-8084-exec-9] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:23:17 [http-nio-8084-exec-9] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 700, size: 8236 bytes +2025-10-29 10:23:17 [http-nio-8084-exec-9] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:23:17 [http-nio-8084-exec-9] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 701, size: 8236 bytes +2025-10-29 10:23:17 [http-nio-8084-exec-9] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:23:17 [http-nio-8084-exec-9] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 702, size: 8236 bytes +2025-10-29 10:23:17 [http-nio-8084-exec-9] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:23:17 [http-nio-8084-exec-9] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 703, size: 8236 bytes +2025-10-29 10:23:17 [http-nio-8084-exec-9] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:23:17 [http-nio-8084-exec-9] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 704, size: 8236 bytes +2025-10-29 10:23:17 [http-nio-8084-exec-9] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:23:17 [http-nio-8084-exec-9] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 705, size: 8236 bytes +2025-10-29 10:23:17 [http-nio-8084-exec-10] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:23:17 [http-nio-8084-exec-10] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 706, size: 8236 bytes +2025-10-29 10:23:18 [http-nio-8084-exec-1] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:23:18 [http-nio-8084-exec-1] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 707, size: 8236 bytes +2025-10-29 10:23:18 [http-nio-8084-exec-2] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:23:18 [http-nio-8084-exec-2] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 708, size: 8236 bytes +2025-10-29 10:23:18 [http-nio-8084-exec-3] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:23:18 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 709, size: 8236 bytes +2025-10-29 10:23:18 [http-nio-8084-exec-4] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:23:18 [http-nio-8084-exec-4] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 710, size: 8236 bytes +2025-10-29 10:23:19 [http-nio-8084-exec-5] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:23:19 [http-nio-8084-exec-5] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 711, size: 8236 bytes +2025-10-29 10:23:19 [http-nio-8084-exec-6] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:23:19 [http-nio-8084-exec-6] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 712, size: 8236 bytes +2025-10-29 10:23:19 [http-nio-8084-exec-7] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:23:19 [http-nio-8084-exec-7] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 713, size: 8236 bytes +2025-10-29 10:23:19 [http-nio-8084-exec-8] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:23:19 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 714, size: 8236 bytes +2025-10-29 10:23:20 [http-nio-8084-exec-9] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:23:20 [http-nio-8084-exec-9] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 715, size: 8236 bytes +2025-10-29 10:23:20 [http-nio-8084-exec-10] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:23:20 [http-nio-8084-exec-10] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 716, size: 8236 bytes +2025-10-29 10:23:20 [http-nio-8084-exec-1] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:23:20 [http-nio-8084-exec-1] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 717, size: 8236 bytes +2025-10-29 10:23:20 [http-nio-8084-exec-2] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:23:20 [http-nio-8084-exec-2] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 718, size: 8236 bytes +2025-10-29 10:23:21 [http-nio-8084-exec-3] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:23:21 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 719, size: 8236 bytes +2025-10-29 10:23:21 [http-nio-8084-exec-4] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:23:21 [http-nio-8084-exec-4] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 720, size: 8236 bytes +2025-10-29 10:23:21 [http-nio-8084-exec-5] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:23:21 [http-nio-8084-exec-5] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 721, size: 8236 bytes +2025-10-29 10:23:22 [http-nio-8084-exec-6] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:23:22 [http-nio-8084-exec-6] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 722, size: 8236 bytes +2025-10-29 10:23:22 [http-nio-8084-exec-6] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:23:22 [http-nio-8084-exec-6] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 723, size: 8236 bytes +2025-10-29 10:23:22 [http-nio-8084-exec-7] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:23:22 [http-nio-8084-exec-7] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 724, size: 8236 bytes +2025-10-29 10:23:22 [http-nio-8084-exec-8] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:23:22 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 725, size: 8236 bytes +2025-10-29 10:23:22 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:23:22 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - 오디오 청크 없음 - meetingId: test-meeting-001 +2025-10-29 10:23:22 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:23:22 [http-nio-8084-exec-9] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:23:22 [http-nio-8084-exec-9] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 726, size: 8236 bytes +2025-10-29 10:23:23 [http-nio-8084-exec-10] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:23:23 [http-nio-8084-exec-10] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 727, size: 8236 bytes +2025-10-29 10:23:23 [http-nio-8084-exec-1] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:23:23 [http-nio-8084-exec-1] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 728, size: 8236 bytes +2025-10-29 10:23:23 [http-nio-8084-exec-2] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:23:23 [http-nio-8084-exec-2] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 729, size: 8236 bytes +2025-10-29 10:23:23 [http-nio-8084-exec-3] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:23:23 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 730, size: 8236 bytes +2025-10-29 10:23:24 [http-nio-8084-exec-4] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:23:24 [http-nio-8084-exec-4] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 731, size: 8236 bytes +2025-10-29 10:23:24 [http-nio-8084-exec-5] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:23:24 [http-nio-8084-exec-5] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 732, size: 8236 bytes +2025-10-29 10:23:24 [http-nio-8084-exec-6] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:23:24 [http-nio-8084-exec-6] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 733, size: 8236 bytes +2025-10-29 10:23:25 [http-nio-8084-exec-7] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:23:25 [http-nio-8084-exec-7] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 734, size: 8236 bytes +2025-10-29 10:23:25 [http-nio-8084-exec-8] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:23:25 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 735, size: 8236 bytes +2025-10-29 10:23:25 [http-nio-8084-exec-9] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:23:25 [http-nio-8084-exec-9] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 736, size: 8236 bytes +2025-10-29 10:23:25 [http-nio-8084-exec-10] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:23:25 [http-nio-8084-exec-10] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 737, size: 8236 bytes +2025-10-29 10:23:26 [http-nio-8084-exec-1] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:23:26 [http-nio-8084-exec-1] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 738, size: 8236 bytes +2025-10-29 10:23:26 [http-nio-8084-exec-2] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:23:26 [http-nio-8084-exec-2] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 739, size: 8236 bytes +2025-10-29 10:23:26 [http-nio-8084-exec-3] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:23:26 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 740, size: 8236 bytes +2025-10-29 10:23:26 [http-nio-8084-exec-4] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:23:26 [http-nio-8084-exec-4] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 741, size: 8236 bytes +2025-10-29 10:23:27 [http-nio-8084-exec-5] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:23:27 [http-nio-8084-exec-5] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 742, size: 8236 bytes +2025-10-29 10:23:27 [http-nio-8084-exec-6] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:23:27 [http-nio-8084-exec-6] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 743, size: 8236 bytes +2025-10-29 10:23:27 [http-nio-8084-exec-7] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:23:27 [http-nio-8084-exec-7] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 744, size: 8236 bytes +2025-10-29 10:23:27 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:23:27 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - 오디오 청크 없음 - meetingId: test-meeting-001 +2025-10-29 10:23:27 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:23:27 [http-nio-8084-exec-8] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:23:27 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 745, size: 8236 bytes +2025-10-29 10:23:28 [http-nio-8084-exec-9] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:23:28 [http-nio-8084-exec-9] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 746, size: 8236 bytes +2025-10-29 10:23:28 [http-nio-8084-exec-10] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:23:28 [http-nio-8084-exec-10] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 747, size: 8236 bytes +2025-10-29 10:23:28 [http-nio-8084-exec-1] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:23:28 [http-nio-8084-exec-1] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 748, size: 8236 bytes +2025-10-29 10:23:28 [http-nio-8084-exec-2] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:23:28 [http-nio-8084-exec-2] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 749, size: 8236 bytes +2025-10-29 10:23:29 [http-nio-8084-exec-3] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:23:29 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 750, size: 8236 bytes +2025-10-29 10:23:29 [http-nio-8084-exec-4] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:23:29 [http-nio-8084-exec-4] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 751, size: 8236 bytes +2025-10-29 10:23:29 [http-nio-8084-exec-5] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:23:29 [http-nio-8084-exec-5] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 752, size: 8236 bytes +2025-10-29 10:23:29 [http-nio-8084-exec-6] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:23:29 [http-nio-8084-exec-6] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 753, size: 8236 bytes +2025-10-29 10:23:30 [http-nio-8084-exec-7] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:23:30 [http-nio-8084-exec-7] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 754, size: 8236 bytes +2025-10-29 10:23:30 [http-nio-8084-exec-8] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:23:30 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 755, size: 8236 bytes +2025-10-29 10:23:30 [http-nio-8084-exec-9] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:23:30 [http-nio-8084-exec-9] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 756, size: 8236 bytes +2025-10-29 10:23:30 [http-nio-8084-exec-10] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:23:30 [http-nio-8084-exec-10] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 757, size: 8236 bytes +2025-10-29 10:23:31 [http-nio-8084-exec-1] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:23:31 [http-nio-8084-exec-1] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 758, size: 8236 bytes +2025-10-29 10:23:31 [http-nio-8084-exec-2] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:23:31 [http-nio-8084-exec-2] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 759, size: 8236 bytes +2025-10-29 10:23:31 [http-nio-8084-exec-3] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:23:31 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 760, size: 8236 bytes +2025-10-29 10:23:31 [http-nio-8084-exec-4] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:23:31 [http-nio-8084-exec-4] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 761, size: 8236 bytes +2025-10-29 10:23:32 [http-nio-8084-exec-5] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:23:32 [http-nio-8084-exec-5] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 762, size: 8236 bytes +2025-10-29 10:23:32 [http-nio-8084-exec-6] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:23:32 [http-nio-8084-exec-6] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 763, size: 8236 bytes +2025-10-29 10:23:32 [http-nio-8084-exec-7] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:23:32 [http-nio-8084-exec-7] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 764, size: 8236 bytes +2025-10-29 10:23:32 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:23:32 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - 오디오 청크 없음 - meetingId: test-meeting-001 +2025-10-29 10:23:32 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:23:32 [http-nio-8084-exec-8] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:23:32 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 765, size: 8236 bytes +2025-10-29 10:23:33 [http-nio-8084-exec-9] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:23:33 [http-nio-8084-exec-9] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 766, size: 8236 bytes +2025-10-29 10:23:33 [http-nio-8084-exec-10] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:23:33 [http-nio-8084-exec-10] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 767, size: 8236 bytes +2025-10-29 10:23:33 [http-nio-8084-exec-1] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:23:33 [http-nio-8084-exec-1] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 768, size: 8236 bytes +2025-10-29 10:23:33 [http-nio-8084-exec-2] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:23:33 [http-nio-8084-exec-2] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 769, size: 8236 bytes +2025-10-29 10:23:34 [http-nio-8084-exec-3] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:23:34 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 770, size: 8236 bytes +2025-10-29 10:23:34 [http-nio-8084-exec-4] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:23:34 [http-nio-8084-exec-4] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 771, size: 8236 bytes +2025-10-29 10:23:34 [http-nio-8084-exec-4] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:23:34 [http-nio-8084-exec-4] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 772, size: 8236 bytes +2025-10-29 10:23:35 [http-nio-8084-exec-5] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:23:35 [http-nio-8084-exec-5] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 773, size: 8236 bytes +2025-10-29 10:23:35 [http-nio-8084-exec-6] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:23:35 [http-nio-8084-exec-6] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 774, size: 8236 bytes +2025-10-29 10:23:35 [http-nio-8084-exec-7] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:23:35 [http-nio-8084-exec-7] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 775, size: 8236 bytes +2025-10-29 10:23:35 [http-nio-8084-exec-8] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:23:35 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 776, size: 8236 bytes +2025-10-29 10:23:36 [http-nio-8084-exec-9] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:23:36 [http-nio-8084-exec-9] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 777, size: 8236 bytes +2025-10-29 10:23:36 [http-nio-8084-exec-10] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:23:36 [http-nio-8084-exec-10] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 778, size: 8236 bytes +2025-10-29 10:23:36 [http-nio-8084-exec-1] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:23:36 [http-nio-8084-exec-1] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 779, size: 8236 bytes +2025-10-29 10:23:36 [http-nio-8084-exec-2] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:23:36 [http-nio-8084-exec-2] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 780, size: 8236 bytes +2025-10-29 10:23:37 [http-nio-8084-exec-3] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:23:37 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 781, size: 8236 bytes +2025-10-29 10:23:37 [http-nio-8084-exec-4] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:23:37 [http-nio-8084-exec-4] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 782, size: 8236 bytes +2025-10-29 10:23:37 [http-nio-8084-exec-5] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:23:37 [http-nio-8084-exec-5] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 783, size: 8236 bytes +2025-10-29 10:23:37 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:23:37 [http-nio-8084-exec-6] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:23:37 [http-nio-8084-exec-6] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 784, size: 8236 bytes +2025-10-29 10:23:37 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - 오디오 청크 없음 - meetingId: test-meeting-001 +2025-10-29 10:23:37 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:23:38 [http-nio-8084-exec-7] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:23:38 [http-nio-8084-exec-7] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 785, size: 8236 bytes +2025-10-29 10:23:38 [http-nio-8084-exec-8] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:23:38 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 786, size: 8236 bytes +2025-10-29 10:23:38 [http-nio-8084-exec-9] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:23:38 [http-nio-8084-exec-9] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 787, size: 8236 bytes +2025-10-29 10:23:38 [http-nio-8084-exec-10] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:23:38 [http-nio-8084-exec-10] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 788, size: 8236 bytes +2025-10-29 10:23:39 [http-nio-8084-exec-1] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:23:39 [http-nio-8084-exec-1] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 789, size: 8236 bytes +2025-10-29 10:23:39 [http-nio-8084-exec-2] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Error in execution + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:52) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:50) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:673) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$DefaultSingleInvocationSpec.get(LettuceInvoker.java:589) + at org.springframework.data.redis.connection.lettuce.LettuceStreamCommands.xAdd(LettuceStreamCommands.java:93) + at org.springframework.data.redis.connection.DefaultedRedisConnection.xAdd(DefaultedRedisConnection.java:489) + at org.springframework.data.redis.connection.RedisStreamCommands.xAdd(RedisStreamCommands.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.lambda$add$1(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:97) + at org.springframework.data.redis.core.DefaultStreamOperations.add(DefaultStreamOperations.java:136) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:122) + at org.springframework.data.redis.core.StreamOperations.add(StreamOperations.java:109) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:55) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:144) + at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) + at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120) + at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111) + at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) + at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) + at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) + at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) + at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) + 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) + ... 1 common frames omitted +2025-10-29 10:23:39 [http-nio-8084-exec-2] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 790, size: 8236 bytes +2025-10-29 10:23:39 [SpringApplicationShutdownHook] INFO o.s.o.j.LocalContainerEntityManagerFactoryBean - Closing JPA EntityManagerFactory for persistence unit 'default' +2025-10-29 10:23:39 [SpringApplicationShutdownHook] TRACE o.h.type.spi.TypeConfiguration$Scope - Handling #sessionFactoryClosed from [org.hibernate.internal.SessionFactoryImpl@54ee423f] for TypeConfiguration +2025-10-29 10:23:39 [SpringApplicationShutdownHook] DEBUG o.h.type.spi.TypeConfiguration$Scope - Un-scoping TypeConfiguration [org.hibernate.type.spi.TypeConfiguration$Scope@69935efe] from SessionFactory [org.hibernate.internal.SessionFactoryImpl@54ee423f] +2025-10-29 10:23:39 [SpringApplicationShutdownHook] INFO com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Shutdown initiated... +2025-10-29 10:23:39 [SpringApplicationShutdownHook] INFO com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Shutdown completed. +2025-10-29 10:23:39 [SpringApplicationShutdownHook] ERROR c.u.h.s.c.AudioWebSocketHandler - WebSocket 전송 오류 - sessionId: 0a9b6320-768f-3183-cd95-fc77941c3152 +java.io.IOException: java.nio.channels.ClosedChannelException + at org.apache.tomcat.websocket.WsRemoteEndpointImplBase.sendMessageBlockInternal(WsRemoteEndpointImplBase.java:326) + at org.apache.tomcat.websocket.WsRemoteEndpointImplBase.sendMessageBlock(WsRemoteEndpointImplBase.java:266) + at org.apache.tomcat.websocket.WsSession.sendCloseMessage(WsSession.java:792) + at org.apache.tomcat.websocket.WsSession.doClose(WsSession.java:589) + at org.apache.tomcat.websocket.WsSession.doClose(WsSession.java:556) + at org.apache.tomcat.websocket.WsSession.close(WsSession.java:544) + at org.apache.tomcat.websocket.WsWebSocketContainer.destroy(WsWebSocketContainer.java:1024) + at org.apache.tomcat.websocket.server.WsContextListener.contextDestroyed(WsContextListener.java:46) + at org.apache.catalina.core.StandardContext.listenerStop(StandardContext.java:4039) + at org.apache.catalina.core.StandardContext.stopInternal(StandardContext.java:4648) + at org.apache.catalina.util.LifecycleBase.stop(LifecycleBase.java:231) + at org.apache.catalina.core.ContainerBase$StopChild.call(ContainerBase.java:1219) + at org.apache.catalina.core.ContainerBase$StopChild.call(ContainerBase.java:1208) + at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:317) + at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:75) + at java.base/java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:148) + at org.apache.catalina.core.ContainerBase.stopInternal(ContainerBase.java:814) + at org.apache.catalina.util.LifecycleBase.stop(LifecycleBase.java:231) + at org.apache.catalina.core.ContainerBase$StopChild.call(ContainerBase.java:1219) + at org.apache.catalina.core.ContainerBase$StopChild.call(ContainerBase.java:1208) + at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:317) + at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:75) + at java.base/java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:148) + at org.apache.catalina.core.ContainerBase.stopInternal(ContainerBase.java:814) + at org.apache.catalina.util.LifecycleBase.stop(LifecycleBase.java:231) + at org.apache.catalina.core.StandardService.stopInternal(StandardService.java:471) + at org.apache.catalina.util.LifecycleBase.stop(LifecycleBase.java:231) + at org.apache.catalina.core.StandardServer.stopInternal(StandardServer.java:915) + at org.apache.catalina.util.LifecycleBase.stop(LifecycleBase.java:231) + at org.apache.catalina.startup.Tomcat.stop(Tomcat.java:447) + at org.springframework.boot.web.embedded.tomcat.TomcatWebServer.stopTomcat(TomcatWebServer.java:301) + at org.springframework.boot.web.embedded.tomcat.TomcatWebServer.destroy(TomcatWebServer.java:374) + at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.doClose(ServletWebServerApplicationContext.java:177) + at org.springframework.context.support.AbstractApplicationContext.close(AbstractApplicationContext.java:1102) + at org.springframework.boot.SpringApplicationShutdownHook.closeAndWait(SpringApplicationShutdownHook.java:145) + at java.base/java.lang.Iterable.forEach(Iterable.java:75) + at org.springframework.boot.SpringApplicationShutdownHook.run(SpringApplicationShutdownHook.java:114) + at java.base/java.lang.Thread.run(Thread.java:1575) +Caused by: java.nio.channels.ClosedChannelException: null + at org.apache.tomcat.util.net.NioChannel$1.write(NioChannel.java:273) + at org.apache.tomcat.util.net.NioEndpoint$NioSocketWrapper$NioOperationState.run(NioEndpoint.java:1632) + at org.apache.tomcat.util.net.SocketWrapperBase$OperationState.start(SocketWrapperBase.java:1051) + at org.apache.tomcat.util.net.SocketWrapperBase.vectoredOperation(SocketWrapperBase.java:1440) + at org.apache.tomcat.util.net.SocketWrapperBase.write(SocketWrapperBase.java:1366) + at org.apache.tomcat.util.net.SocketWrapperBase.write(SocketWrapperBase.java:1337) + at org.apache.tomcat.websocket.server.WsRemoteEndpointImplServer.doWrite(WsRemoteEndpointImplServer.java:171) + at org.apache.tomcat.websocket.WsRemoteEndpointImplBase.writeMessagePart(WsRemoteEndpointImplBase.java:521) + at org.apache.tomcat.websocket.WsRemoteEndpointImplBase.sendMessageBlockInternal(WsRemoteEndpointImplBase.java:313) + ... 37 common frames omitted +2025-10-29 10:23:39 [SpringApplicationShutdownHook] INFO c.u.h.s.c.AudioWebSocketHandler - WebSocket 연결 종료 - sessionId: 0a9b6320-768f-3183-cd95-fc77941c3152, meetingId: test-meeting-001, status: CloseStatus[code=1001, reason=The web application is stopping] +2025-10-29 10:24:42 [main] INFO c.unicorn.hgzero.stt.SttApplication - Starting SttApplication using Java 23.0.2 with PID 51777 (/Users/jominseo/HGZero/stt/build/classes/java/main started by jominseo in /Users/jominseo/HGZero/stt) +2025-10-29 10:24:42 [main] DEBUG c.unicorn.hgzero.stt.SttApplication - Running with Spring Boot v3.3.5, Spring v6.1.14 +2025-10-29 10:24:42 [main] INFO c.unicorn.hgzero.stt.SttApplication - No active profile set, falling back to 1 default profile: "default" +2025-10-29 10:24:42 [main] INFO o.s.d.r.c.RepositoryConfigurationDelegate - Multiple Spring Data modules found, entering strict repository configuration mode +2025-10-29 10:24:42 [main] INFO o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data JPA repositories in DEFAULT mode. +2025-10-29 10:24:42 [main] INFO o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 36 ms. Found 3 JPA repository interfaces. +2025-10-29 10:24:43 [main] INFO o.s.d.r.c.RepositoryConfigurationDelegate - Multiple Spring Data modules found, entering strict repository configuration mode +2025-10-29 10:24:43 [main] INFO o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data Redis repositories in DEFAULT mode. +2025-10-29 10:24:43 [main] INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.unicorn.hgzero.stt.repository.jpa.RecordingRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-10-29 10:24:43 [main] INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.unicorn.hgzero.stt.repository.jpa.TranscriptSegmentRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-10-29 10:24:43 [main] INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.unicorn.hgzero.stt.repository.jpa.TranscriptionRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-10-29 10:24:43 [main] INFO o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 5 ms. Found 0 Redis repository interfaces. +2025-10-29 10:24:43 [main] INFO o.s.b.w.e.tomcat.TomcatWebServer - Tomcat initialized with port 8084 (http) +2025-10-29 10:24:43 [main] INFO o.a.catalina.core.StandardService - Starting service [Tomcat] +2025-10-29 10:24:43 [main] INFO o.a.catalina.core.StandardEngine - Starting Servlet engine: [Apache Tomcat/10.1.31] +2025-10-29 10:24:43 [main] INFO o.a.c.c.C.[Tomcat].[localhost].[/] - Initializing Spring embedded WebApplicationContext +2025-10-29 10:24:43 [main] INFO o.s.b.w.s.c.ServletWebServerApplicationContext - Root WebApplicationContext: initialization completed in 633 ms +2025-10-29 10:24:43 [main] INFO o.h.jpa.internal.util.LogHelper - HHH000204: Processing PersistenceUnitInfo [name: default] +2025-10-29 10:24:43 [main] INFO org.hibernate.Version - HHH000412: Hibernate ORM core version 6.5.3.Final +2025-10-29 10:24:43 [main] INFO o.h.c.i.RegionFactoryInitiator - HHH000026: Second-level cache disabled +2025-10-29 10:24:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration boolean -> org.hibernate.type.BasicTypeReference@3d7314b3 +2025-10-29 10:24:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration boolean -> org.hibernate.type.BasicTypeReference@3d7314b3 +2025-10-29 10:24:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Boolean -> org.hibernate.type.BasicTypeReference@3d7314b3 +2025-10-29 10:24:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration numeric_boolean -> org.hibernate.type.BasicTypeReference@d677be9 +2025-10-29 10:24:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration org.hibernate.type.NumericBooleanConverter -> org.hibernate.type.BasicTypeReference@d677be9 +2025-10-29 10:24:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration true_false -> org.hibernate.type.BasicTypeReference@fefb66c +2025-10-29 10:24:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration org.hibernate.type.TrueFalseConverter -> org.hibernate.type.BasicTypeReference@fefb66c +2025-10-29 10:24:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration yes_no -> org.hibernate.type.BasicTypeReference@6d7556a8 +2025-10-29 10:24:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration org.hibernate.type.YesNoConverter -> org.hibernate.type.BasicTypeReference@6d7556a8 +2025-10-29 10:24:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration byte -> org.hibernate.type.BasicTypeReference@48860139 +2025-10-29 10:24:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration byte -> org.hibernate.type.BasicTypeReference@48860139 +2025-10-29 10:24:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Byte -> org.hibernate.type.BasicTypeReference@48860139 +2025-10-29 10:24:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration binary -> org.hibernate.type.BasicTypeReference@7e0883f3 +2025-10-29 10:24:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration byte[] -> org.hibernate.type.BasicTypeReference@7e0883f3 +2025-10-29 10:24:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration [B -> org.hibernate.type.BasicTypeReference@7e0883f3 +2025-10-29 10:24:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration binary_wrapper -> org.hibernate.type.BasicTypeReference@ca60688 +2025-10-29 10:24:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration wrapper-binary -> org.hibernate.type.BasicTypeReference@ca60688 +2025-10-29 10:24:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration image -> org.hibernate.type.BasicTypeReference@4ba1c1a2 +2025-10-29 10:24:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration blob -> org.hibernate.type.BasicTypeReference@33568e26 +2025-10-29 10:24:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.sql.Blob -> org.hibernate.type.BasicTypeReference@33568e26 +2025-10-29 10:24:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration materialized_blob -> org.hibernate.type.BasicTypeReference@97b84a4 +2025-10-29 10:24:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration materialized_blob_wrapper -> org.hibernate.type.BasicTypeReference@35555145 +2025-10-29 10:24:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration short -> org.hibernate.type.BasicTypeReference@70bc3a9c +2025-10-29 10:24:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration short -> org.hibernate.type.BasicTypeReference@70bc3a9c +2025-10-29 10:24:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Short -> org.hibernate.type.BasicTypeReference@70bc3a9c +2025-10-29 10:24:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration integer -> org.hibernate.type.BasicTypeReference@771cbd13 +2025-10-29 10:24:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration int -> org.hibernate.type.BasicTypeReference@771cbd13 +2025-10-29 10:24:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Integer -> org.hibernate.type.BasicTypeReference@771cbd13 +2025-10-29 10:24:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration long -> org.hibernate.type.BasicTypeReference@229749f0 +2025-10-29 10:24:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration long -> org.hibernate.type.BasicTypeReference@229749f0 +2025-10-29 10:24:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Long -> org.hibernate.type.BasicTypeReference@229749f0 +2025-10-29 10:24:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration float -> org.hibernate.type.BasicTypeReference@3d57fb9e +2025-10-29 10:24:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration float -> org.hibernate.type.BasicTypeReference@3d57fb9e +2025-10-29 10:24:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Float -> org.hibernate.type.BasicTypeReference@3d57fb9e +2025-10-29 10:24:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration double -> org.hibernate.type.BasicTypeReference@2c2e5e72 +2025-10-29 10:24:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration double -> org.hibernate.type.BasicTypeReference@2c2e5e72 +2025-10-29 10:24:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Double -> org.hibernate.type.BasicTypeReference@2c2e5e72 +2025-10-29 10:24:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration big_integer -> org.hibernate.type.BasicTypeReference@3e489ac1 +2025-10-29 10:24:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.math.BigInteger -> org.hibernate.type.BasicTypeReference@3e489ac1 +2025-10-29 10:24:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration big_decimal -> org.hibernate.type.BasicTypeReference@26888c31 +2025-10-29 10:24:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.math.BigDecimal -> org.hibernate.type.BasicTypeReference@26888c31 +2025-10-29 10:24:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration character -> org.hibernate.type.BasicTypeReference@24010875 +2025-10-29 10:24:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration char -> org.hibernate.type.BasicTypeReference@24010875 +2025-10-29 10:24:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Character -> org.hibernate.type.BasicTypeReference@24010875 +2025-10-29 10:24:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration character_nchar -> org.hibernate.type.BasicTypeReference@7a021f49 +2025-10-29 10:24:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration string -> org.hibernate.type.BasicTypeReference@e60c5a +2025-10-29 10:24:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.String -> org.hibernate.type.BasicTypeReference@e60c5a +2025-10-29 10:24:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration nstring -> org.hibernate.type.BasicTypeReference@626df173 +2025-10-29 10:24:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration characters -> org.hibernate.type.BasicTypeReference@4e030feb +2025-10-29 10:24:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration char[] -> org.hibernate.type.BasicTypeReference@4e030feb +2025-10-29 10:24:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration [C -> org.hibernate.type.BasicTypeReference@4e030feb +2025-10-29 10:24:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration wrapper-characters -> org.hibernate.type.BasicTypeReference@2411b935 +2025-10-29 10:24:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration text -> org.hibernate.type.BasicTypeReference@1425e531 +2025-10-29 10:24:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration ntext -> org.hibernate.type.BasicTypeReference@194e78af +2025-10-29 10:24:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration clob -> org.hibernate.type.BasicTypeReference@4fe4503a +2025-10-29 10:24:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.sql.Clob -> org.hibernate.type.BasicTypeReference@4fe4503a +2025-10-29 10:24:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration nclob -> org.hibernate.type.BasicTypeReference@669580e2 +2025-10-29 10:24:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.sql.NClob -> org.hibernate.type.BasicTypeReference@669580e2 +2025-10-29 10:24:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration materialized_clob -> org.hibernate.type.BasicTypeReference@5d22ed6c +2025-10-29 10:24:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration materialized_clob_char_array -> org.hibernate.type.BasicTypeReference@37c37d67 +2025-10-29 10:24:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration materialized_clob_character_array -> org.hibernate.type.BasicTypeReference@5a4b8e25 +2025-10-29 10:24:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration materialized_nclob -> org.hibernate.type.BasicTypeReference@1013871e +2025-10-29 10:24:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration materialized_nclob_character_array -> org.hibernate.type.BasicTypeReference@5a9051fd +2025-10-29 10:24:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration materialized_nclob_char_array -> org.hibernate.type.BasicTypeReference@7614378d +2025-10-29 10:24:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration Duration -> org.hibernate.type.BasicTypeReference@7028b5cc +2025-10-29 10:24:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.Duration -> org.hibernate.type.BasicTypeReference@7028b5cc +2025-10-29 10:24:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration LocalDateTime -> org.hibernate.type.BasicTypeReference@7c0ff7a0 +2025-10-29 10:24:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.LocalDateTime -> org.hibernate.type.BasicTypeReference@7c0ff7a0 +2025-10-29 10:24:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration LocalDate -> org.hibernate.type.BasicTypeReference@24c84e65 +2025-10-29 10:24:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.LocalDate -> org.hibernate.type.BasicTypeReference@24c84e65 +2025-10-29 10:24:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration LocalTime -> org.hibernate.type.BasicTypeReference@7337bd2e +2025-10-29 10:24:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.LocalTime -> org.hibernate.type.BasicTypeReference@7337bd2e +2025-10-29 10:24:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration OffsetDateTime -> org.hibernate.type.BasicTypeReference@4604e051 +2025-10-29 10:24:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.OffsetDateTime -> org.hibernate.type.BasicTypeReference@4604e051 +2025-10-29 10:24:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration OffsetDateTimeWithTimezone -> org.hibernate.type.BasicTypeReference@4535bdc6 +2025-10-29 10:24:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration OffsetDateTimeWithoutTimezone -> org.hibernate.type.BasicTypeReference@23e86863 +2025-10-29 10:24:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration OffsetTime -> org.hibernate.type.BasicTypeReference@6df87ffd +2025-10-29 10:24:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.OffsetTime -> org.hibernate.type.BasicTypeReference@6df87ffd +2025-10-29 10:24:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration OffsetTimeUtc -> org.hibernate.type.BasicTypeReference@c1f0c7b +2025-10-29 10:24:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration OffsetTimeWithTimezone -> org.hibernate.type.BasicTypeReference@642c5bb3 +2025-10-29 10:24:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration OffsetTimeWithoutTimezone -> org.hibernate.type.BasicTypeReference@4e79c25 +2025-10-29 10:24:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration ZonedDateTime -> org.hibernate.type.BasicTypeReference@2ace1cd3 +2025-10-29 10:24:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.ZonedDateTime -> org.hibernate.type.BasicTypeReference@2ace1cd3 +2025-10-29 10:24:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration ZonedDateTimeWithTimezone -> org.hibernate.type.BasicTypeReference@5e46a125 +2025-10-29 10:24:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration ZonedDateTimeWithoutTimezone -> org.hibernate.type.BasicTypeReference@5831989d +2025-10-29 10:24:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration date -> org.hibernate.type.BasicTypeReference@608f310a +2025-10-29 10:24:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.sql.Date -> org.hibernate.type.BasicTypeReference@608f310a +2025-10-29 10:24:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration time -> org.hibernate.type.BasicTypeReference@3a7d914c +2025-10-29 10:24:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.sql.Time -> org.hibernate.type.BasicTypeReference@3a7d914c +2025-10-29 10:24:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration timestamp -> org.hibernate.type.BasicTypeReference@515940af +2025-10-29 10:24:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.sql.Timestamp -> org.hibernate.type.BasicTypeReference@515940af +2025-10-29 10:24:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.util.Date -> org.hibernate.type.BasicTypeReference@515940af +2025-10-29 10:24:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration calendar -> org.hibernate.type.BasicTypeReference@5f8df69 +2025-10-29 10:24:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.util.Calendar -> org.hibernate.type.BasicTypeReference@5f8df69 +2025-10-29 10:24:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.util.GregorianCalendar -> org.hibernate.type.BasicTypeReference@5f8df69 +2025-10-29 10:24:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration calendar_date -> org.hibernate.type.BasicTypeReference@1ce6a9bd +2025-10-29 10:24:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration calendar_time -> org.hibernate.type.BasicTypeReference@4a47bc9c +2025-10-29 10:24:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration instant -> org.hibernate.type.BasicTypeReference@5100c143 +2025-10-29 10:24:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.Instant -> org.hibernate.type.BasicTypeReference@5100c143 +2025-10-29 10:24:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration uuid -> org.hibernate.type.BasicTypeReference@12404f9d +2025-10-29 10:24:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.util.UUID -> org.hibernate.type.BasicTypeReference@12404f9d +2025-10-29 10:24:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration pg-uuid -> org.hibernate.type.BasicTypeReference@12404f9d +2025-10-29 10:24:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration uuid-binary -> org.hibernate.type.BasicTypeReference@3b42b729 +2025-10-29 10:24:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration uuid-char -> org.hibernate.type.BasicTypeReference@4c164f81 +2025-10-29 10:24:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration class -> org.hibernate.type.BasicTypeReference@1bcb8599 +2025-10-29 10:24:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Class -> org.hibernate.type.BasicTypeReference@1bcb8599 +2025-10-29 10:24:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration currency -> org.hibernate.type.BasicTypeReference@b671dda +2025-10-29 10:24:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration Currency -> org.hibernate.type.BasicTypeReference@b671dda +2025-10-29 10:24:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.util.Currency -> org.hibernate.type.BasicTypeReference@b671dda +2025-10-29 10:24:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration locale -> org.hibernate.type.BasicTypeReference@25b20860 +2025-10-29 10:24:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.util.Locale -> org.hibernate.type.BasicTypeReference@25b20860 +2025-10-29 10:24:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration serializable -> org.hibernate.type.BasicTypeReference@5ba63110 +2025-10-29 10:24:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.io.Serializable -> org.hibernate.type.BasicTypeReference@5ba63110 +2025-10-29 10:24:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration timezone -> org.hibernate.type.BasicTypeReference@1c0680b0 +2025-10-29 10:24:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.util.TimeZone -> org.hibernate.type.BasicTypeReference@1c0680b0 +2025-10-29 10:24:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration ZoneOffset -> org.hibernate.type.BasicTypeReference@2f3cd727 +2025-10-29 10:24:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.ZoneOffset -> org.hibernate.type.BasicTypeReference@2f3cd727 +2025-10-29 10:24:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration url -> org.hibernate.type.BasicTypeReference@1af82ba8 +2025-10-29 10:24:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.net.URL -> org.hibernate.type.BasicTypeReference@1af82ba8 +2025-10-29 10:24:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration vector -> org.hibernate.type.BasicTypeReference@703cb756 +2025-10-29 10:24:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration row_version -> org.hibernate.type.BasicTypeReference@5897aae1 +2025-10-29 10:24:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration object -> org.hibernate.type.JavaObjectType@4e357792 +2025-10-29 10:24:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Object -> org.hibernate.type.JavaObjectType@4e357792 +2025-10-29 10:24:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration null -> org.hibernate.type.NullType@4ebed2b3 +2025-10-29 10:24:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration imm_date -> org.hibernate.type.BasicTypeReference@11069eac +2025-10-29 10:24:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration imm_time -> org.hibernate.type.BasicTypeReference@2059f785 +2025-10-29 10:24:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration imm_timestamp -> org.hibernate.type.BasicTypeReference@18ca9277 +2025-10-29 10:24:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration imm_calendar -> org.hibernate.type.BasicTypeReference@3d9c8c3c +2025-10-29 10:24:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration imm_calendar_date -> org.hibernate.type.BasicTypeReference@2dc73024 +2025-10-29 10:24:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration imm_calendar_time -> org.hibernate.type.BasicTypeReference@42cd0fc6 +2025-10-29 10:24:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration imm_binary -> org.hibernate.type.BasicTypeReference@e5864c2 +2025-10-29 10:24:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration imm_serializable -> org.hibernate.type.BasicTypeReference@577cf459 +2025-10-29 10:24:43 [main] INFO o.s.o.j.p.SpringPersistenceUnitInfo - No LoadTimeWeaver setup: ignoring JPA class transformer +2025-10-29 10:24:43 [main] INFO com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Starting... +2025-10-29 10:24:43 [main] INFO com.zaxxer.hikari.pool.HikariPool - HikariPool-1 - Added connection org.postgresql.jdbc.PgConnection@7c37ac3c +2025-10-29 10:24:43 [main] INFO com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Start completed. +2025-10-29 10:24: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 10:24:43 [main] DEBUG o.h.t.d.sql.spi.DdlTypeRegistry - addDescriptor(2003, org.hibernate.type.descriptor.sql.internal.ArrayDdlTypeImpl@2f4fc18) replaced previous registration(org.hibernate.type.descriptor.sql.internal.ArrayDdlTypeImpl@7187078a) +2025-10-29 10:24:43 [main] DEBUG o.h.t.d.sql.spi.DdlTypeRegistry - addDescriptor(6, org.hibernate.type.descriptor.sql.internal.CapacityDependentDdlType@6e612122) replaced previous registration(org.hibernate.type.descriptor.sql.internal.DdlTypeImpl@1d38cdde) +2025-10-29 10:24:43 [main] DEBUG o.h.t.d.jdbc.spi.JdbcTypeRegistry - addDescriptor(2004, BlobTypeDescriptor(BLOB_BINDING)) replaced previous registration(BlobTypeDescriptor(DEFAULT)) +2025-10-29 10:24:43 [main] DEBUG o.h.t.d.jdbc.spi.JdbcTypeRegistry - addDescriptor(2005, ClobTypeDescriptor(CLOB_BINDING)) replaced previous registration(ClobTypeDescriptor(DEFAULT)) +2025-10-29 10:24:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration JAVA_OBJECT -> org.hibernate.type.JavaObjectType@498b697 +2025-10-29 10:24:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Object -> org.hibernate.type.JavaObjectType@498b697 +2025-10-29 10:24:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Type registration key [java.lang.Object] overrode previous entry : `org.hibernate.type.JavaObjectType@4e357792` +2025-10-29 10:24:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration org.hibernate.type.DurationType -> basicType@1(java.time.Duration,3015) +2025-10-29 10:24:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration Duration -> basicType@1(java.time.Duration,3015) +2025-10-29 10:24:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.Duration -> basicType@1(java.time.Duration,3015) +2025-10-29 10:24:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration org.hibernate.type.OffsetDateTimeType -> basicType@2(java.time.OffsetDateTime,3003) +2025-10-29 10:24:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration OffsetDateTime -> basicType@2(java.time.OffsetDateTime,3003) +2025-10-29 10:24:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.OffsetDateTime -> basicType@2(java.time.OffsetDateTime,3003) +2025-10-29 10:24:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration org.hibernate.type.ZonedDateTimeType -> basicType@3(java.time.ZonedDateTime,3003) +2025-10-29 10:24:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration ZonedDateTime -> basicType@3(java.time.ZonedDateTime,3003) +2025-10-29 10:24:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.ZonedDateTime -> basicType@3(java.time.ZonedDateTime,3003) +2025-10-29 10:24:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration org.hibernate.type.OffsetTimeType -> basicType@4(java.time.OffsetTime,3007) +2025-10-29 10:24:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration OffsetTime -> basicType@4(java.time.OffsetTime,3007) +2025-10-29 10:24:43 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.OffsetTime -> basicType@4(java.time.OffsetTime,3007) +2025-10-29 10:24:43 [main] DEBUG o.h.type.spi.TypeConfiguration$Scope - Scoping TypeConfiguration [org.hibernate.type.spi.TypeConfiguration@48788853] to MetadataBuildingContext [org.hibernate.boot.internal.MetadataBuildingContextRootImpl@4ac77269] +2025-10-29 10:24: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 10:24:44 [main] DEBUG o.h.type.spi.TypeConfiguration$Scope - Scoping TypeConfiguration [org.hibernate.type.spi.TypeConfiguration@48788853] to SessionFactoryImplementor [org.hibernate.internal.SessionFactoryImpl@21b75073] +2025-10-29 10:24:44 [main] DEBUG org.hibernate.SQL - + alter table if exists transcript_segments + alter column text set data type TEXT +2025-10-29 10:24:44 [main] DEBUG org.hibernate.SQL - + alter table if exists transcriptions + alter column full_text set data type TEXT +2025-10-29 10:24:44 [main] TRACE o.h.type.spi.TypeConfiguration$Scope - Handling #sessionFactoryCreated from [org.hibernate.internal.SessionFactoryImpl@21b75073] for TypeConfiguration +2025-10-29 10:24:44 [main] INFO o.s.o.j.LocalContainerEntityManagerFactoryBean - Initialized JPA EntityManagerFactory for persistence unit 'default' +2025-10-29 10:24: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 10:24:44 [main] INFO o.s.d.j.r.query.QueryEnhancerFactory - Hibernate is in classpath; If applicable, HQL parser will be used. +2025-10-29 10:24:44 [main] WARN c.u.h.stt.service.AzureSpeechService - Azure Speech Subscription Key 미설정 - 시뮬레이션 모드로 실행 +2025-10-29 10:24:44 [main] WARN o.s.b.a.o.j.JpaBaseConfiguration$JpaWebConfiguration - spring.jpa.open-in-view is enabled by default. Therefore, database queries may be performed during view rendering. Explicitly configure spring.jpa.open-in-view to disable this warning +2025-10-29 10:24:44 [main] WARN o.s.b.a.s.s.UserDetailsServiceAutoConfiguration - + +Using generated security password: 215fef2e-5789-45d4-be26-4461eb984ced + +This generated password is for development use only. Your security configuration must be updated before running your application in production. + +2025-10-29 10:24:44 [main] INFO o.s.s.c.a.a.c.InitializeUserDetailsBeanManagerConfigurer$InitializeUserDetailsManagerConfigurer - Global AuthenticationManager configured with UserDetailsService bean with name inMemoryUserDetailsManager +2025-10-29 10:24:44 [main] INFO o.s.b.a.e.web.EndpointLinksResolver - Exposing 3 endpoints beneath base path '/actuator' +2025-10-29 10:24:45 [main] INFO o.s.b.w.e.tomcat.TomcatWebServer - Tomcat started on port 8084 (http) with context path '/' +2025-10-29 10:24:45 [main] INFO c.unicorn.hgzero.stt.SttApplication - Started SttApplication in 2.627 seconds (process running for 2.745) +2025-10-29 10:24:50 [http-nio-8084-exec-1] INFO o.a.c.c.C.[Tomcat].[localhost].[/] - Initializing Spring DispatcherServlet 'dispatcherServlet' +2025-10-29 10:24:50 [http-nio-8084-exec-1] INFO o.s.web.servlet.DispatcherServlet - Initializing Servlet 'dispatcherServlet' +2025-10-29 10:24:50 [http-nio-8084-exec-1] INFO o.s.web.servlet.DispatcherServlet - Completed initialization in 1 ms +2025-10-29 10:24:50 [http-nio-8084-exec-1] INFO c.u.h.s.c.AudioWebSocketHandler - WebSocket 연결 성공 - sessionId: f9467bfe-d2d6-d016-8e63-e53596cc2db6 +2025-10-29 10:24:52 [http-nio-8084-exec-2] INFO c.u.h.s.c.AudioWebSocketHandler - 녹음 시작 - sessionId: f9467bfe-d2d6-d016-8e63-e53596cc2db6, meetingId: test-meeting-001 +2025-10-29 10:24:53 [http-nio-8084-exec-3] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 0 +2025-10-29 10:24:53 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 0, size: 8236 bytes +2025-10-29 10:24:53 [http-nio-8084-exec-4] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 1 +2025-10-29 10:24:53 [http-nio-8084-exec-4] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 1, size: 8236 bytes +2025-10-29 10:24:53 [http-nio-8084-exec-5] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 2 +2025-10-29 10:24:53 [http-nio-8084-exec-5] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 2, size: 8236 bytes +2025-10-29 10:24:53 [http-nio-8084-exec-6] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 3 +2025-10-29 10:24:53 [http-nio-8084-exec-6] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 3, size: 8236 bytes +2025-10-29 10:24:54 [http-nio-8084-exec-7] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 4 +2025-10-29 10:24:54 [http-nio-8084-exec-7] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 4, size: 8236 bytes +2025-10-29 10:24:54 [http-nio-8084-exec-8] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 5 +2025-10-29 10:24:54 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 5, size: 8236 bytes +2025-10-29 10:24:54 [http-nio-8084-exec-9] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 6 +2025-10-29 10:24:54 [http-nio-8084-exec-9] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 6, size: 8236 bytes +2025-10-29 10:24:54 [http-nio-8084-exec-10] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 7 +2025-10-29 10:24:54 [http-nio-8084-exec-10] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 7, size: 8236 bytes +2025-10-29 10:24:55 [http-nio-8084-exec-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 8 +2025-10-29 10:24:55 [http-nio-8084-exec-1] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 8, size: 8236 bytes +2025-10-29 10:24:55 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:24:55 [scheduling-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 조회 완료 - meetingId: test-meeting-001, count: 9 +2025-10-29 10:24:55 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 오디오 청크 조회 완료 - meetingId: test-meeting-001, chunks: 9개 +2025-10-29 10:24:55 [scheduling-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 병합 완료 - chunks: 9, totalSize: 74124 +2025-10-29 10:24:55 [scheduling-1] WARN c.u.h.stt.service.AzureSpeechService - Azure Speech Service 비활성화 - 시뮬레이션 결과 반환 +2025-10-29 10:24:55 [scheduling-1] INFO c.u.h.stt.service.AzureSpeechService - [시뮬레이션] 음성 인식 결과: 마케팅 예산 배분 계획을 수립해야 합니다. +2025-10-29 10:24:55 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - Event Hub 이벤트 발행 완료 - meetingId: test-meeting-001, text: 마케팅 예산 배분 계획을 수립해야 합니다. +2025-10-29 10:24:55 [scheduling-1] INFO c.u.h.s.c.AudioWebSocketHandler - STT 결과 전송 완료 - meetingId: test-meeting-001, sessions: 1개, text: 마케팅 예산 배분 계획을 수립해야 합니다. +2025-10-29 10:24:55 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - WebSocket 결과 전송 완료 - meetingId: test-meeting-001, text: 마케팅 예산 배분 계획을 수립해야 합니다. +2025-10-29 10:24:55 [ForkJoinPool.commonPool-worker-1] DEBUG c.u.h.s.e.p.EventHubPublisher - Event Hub 발행 시뮬레이션: +2025-10-29 10:24:55 [ForkJoinPool.commonPool-worker-1] DEBUG c.u.h.s.e.p.EventHubPublisher - Topic: transcription-events +2025-10-29 10:24:55 [ForkJoinPool.commonPool-worker-1] DEBUG c.u.h.s.e.p.EventHubPublisher - Event Data: {"eventId":"3c58e646-672c-4558-b3df-e966ba64607d","eventType":"SegmentCreated","segmentId":"0e0dd692-ae78-4cf4-a3b9-e52858d43681","recordingId":"test-meeting-001","meetingId":"test-meeting-001","text":"마케팅 예산 배분 계획을 수립해야 합니다.","speakerId":"UNKNOWN","speakerName":"참석자","timestamp":[2025,10,29,10,24,55,322132000],"duration":5.0,"confidence":0.85,"warningFlag":false,"eventTime":[2025,10,29,10,24,55,323763000]} +2025-10-29 10:24:55 [ForkJoinPool.commonPool-worker-1] INFO c.u.h.s.e.p.EventHubPublisher - 이벤트 발행 완료 - topic: transcription-events, event: SegmentCreated +2025-10-29 10:24:55 [scheduling-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 삭제 완료 - meetingId: test-meeting-001 +2025-10-29 10:24:55 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 회의 처리 완료 - meetingId: test-meeting-001, text: 마케팅 예산 배분 계획을 수립해야 합니다. +2025-10-29 10:24:55 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:24:55 [http-nio-8084-exec-2] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 9 +2025-10-29 10:24:55 [http-nio-8084-exec-2] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 9, size: 8236 bytes +2025-10-29 10:24:55 [http-nio-8084-exec-3] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 10 +2025-10-29 10:24:55 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 10, size: 8236 bytes +2025-10-29 10:24:55 [http-nio-8084-exec-4] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 11 +2025-10-29 10:24:55 [http-nio-8084-exec-4] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 11, size: 8236 bytes +2025-10-29 10:24:56 [http-nio-8084-exec-5] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 12 +2025-10-29 10:24:56 [http-nio-8084-exec-5] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 12, size: 8236 bytes +2025-10-29 10:24:56 [http-nio-8084-exec-6] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 13 +2025-10-29 10:24:56 [http-nio-8084-exec-6] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 13, size: 8236 bytes +2025-10-29 10:24:56 [http-nio-8084-exec-7] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 14 +2025-10-29 10:24:56 [http-nio-8084-exec-7] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 14, size: 8236 bytes +2025-10-29 10:24:56 [http-nio-8084-exec-8] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 15 +2025-10-29 10:24:56 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 15, size: 8236 bytes +2025-10-29 10:24:57 [http-nio-8084-exec-9] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 16 +2025-10-29 10:24:57 [http-nio-8084-exec-9] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 16, size: 8236 bytes +2025-10-29 10:24:57 [http-nio-8084-exec-10] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 17 +2025-10-29 10:24:57 [http-nio-8084-exec-10] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 17, size: 8236 bytes +2025-10-29 10:24:57 [http-nio-8084-exec-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 18 +2025-10-29 10:24:57 [http-nio-8084-exec-1] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 18, size: 8236 bytes +2025-10-29 10:24:57 [http-nio-8084-exec-2] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 19 +2025-10-29 10:24:57 [http-nio-8084-exec-2] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 19, size: 8236 bytes +2025-10-29 10:24:58 [http-nio-8084-exec-3] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 20 +2025-10-29 10:24:58 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 20, size: 8236 bytes +2025-10-29 10:24:58 [http-nio-8084-exec-4] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 21 +2025-10-29 10:24:58 [http-nio-8084-exec-4] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 21, size: 8236 bytes +2025-10-29 10:24:58 [http-nio-8084-exec-5] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 22 +2025-10-29 10:24:58 [http-nio-8084-exec-5] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 22, size: 8236 bytes +2025-10-29 10:24:58 [http-nio-8084-exec-6] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 23 +2025-10-29 10:24:58 [http-nio-8084-exec-6] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 23, size: 8236 bytes +2025-10-29 10:24:59 [http-nio-8084-exec-7] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 24 +2025-10-29 10:24:59 [http-nio-8084-exec-7] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 24, size: 8236 bytes +2025-10-29 10:24:59 [http-nio-8084-exec-8] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 25 +2025-10-29 10:24:59 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 25, size: 8236 bytes +2025-10-29 10:24:59 [http-nio-8084-exec-9] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 26 +2025-10-29 10:24:59 [http-nio-8084-exec-9] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 26, size: 8236 bytes +2025-10-29 10:24:59 [http-nio-8084-exec-10] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 27 +2025-10-29 10:24:59 [http-nio-8084-exec-10] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 27, size: 8236 bytes +2025-10-29 10:25:00 [http-nio-8084-exec-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 28 +2025-10-29 10:25:00 [http-nio-8084-exec-1] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 28, size: 8236 bytes +2025-10-29 10:25:00 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:25:00 [scheduling-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 조회 완료 - meetingId: test-meeting-001, count: 19 +2025-10-29 10:25:00 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 오디오 청크 조회 완료 - meetingId: test-meeting-001, chunks: 19개 +2025-10-29 10:25:00 [scheduling-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 병합 완료 - chunks: 19, totalSize: 156484 +2025-10-29 10:25:00 [scheduling-1] WARN c.u.h.stt.service.AzureSpeechService - Azure Speech Service 비활성화 - 시뮬레이션 결과 반환 +2025-10-29 10:25:00 [scheduling-1] INFO c.u.h.stt.service.AzureSpeechService - [시뮬레이션] 음성 인식 결과: 신제품 개발 일정에 대해 논의하고 있습니다. +2025-10-29 10:25:00 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - Event Hub 이벤트 발행 완료 - meetingId: test-meeting-001, text: 신제품 개발 일정에 대해 논의하고 있습니다. +2025-10-29 10:25:00 [ForkJoinPool.commonPool-worker-1] DEBUG c.u.h.s.e.p.EventHubPublisher - Event Hub 발행 시뮬레이션: +2025-10-29 10:25:00 [ForkJoinPool.commonPool-worker-1] DEBUG c.u.h.s.e.p.EventHubPublisher - Topic: transcription-events +2025-10-29 10:25:00 [ForkJoinPool.commonPool-worker-1] DEBUG c.u.h.s.e.p.EventHubPublisher - Event Data: {"eventId":"d067f2e4-a858-47d8-be30-3dee5d3a9660","eventType":"SegmentCreated","segmentId":"45f27906-83d2-468b-8f04-927c9c79ae18","recordingId":"test-meeting-001","meetingId":"test-meeting-001","text":"신제품 개발 일정에 대해 논의하고 있습니다.","speakerId":"UNKNOWN","speakerName":"참석자","timestamp":[2025,10,29,10,25,0,444402000],"duration":5.0,"confidence":0.85,"warningFlag":false,"eventTime":[2025,10,29,10,25,0,444442000]} +2025-10-29 10:25:00 [ForkJoinPool.commonPool-worker-1] INFO c.u.h.s.e.p.EventHubPublisher - 이벤트 발행 완료 - topic: transcription-events, event: SegmentCreated +2025-10-29 10:25:00 [scheduling-1] INFO c.u.h.s.c.AudioWebSocketHandler - STT 결과 전송 완료 - meetingId: test-meeting-001, sessions: 1개, text: 신제품 개발 일정에 대해 논의하고 있습니다. +2025-10-29 10:25:00 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - WebSocket 결과 전송 완료 - meetingId: test-meeting-001, text: 신제품 개발 일정에 대해 논의하고 있습니다. +2025-10-29 10:25:00 [scheduling-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 삭제 완료 - meetingId: test-meeting-001 +2025-10-29 10:25:00 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 회의 처리 완료 - meetingId: test-meeting-001, text: 신제품 개발 일정에 대해 논의하고 있습니다. +2025-10-29 10:25:00 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:25:00 [http-nio-8084-exec-2] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 29 +2025-10-29 10:25:00 [http-nio-8084-exec-2] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 29, size: 8236 bytes +2025-10-29 10:25:00 [http-nio-8084-exec-3] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 30 +2025-10-29 10:25:00 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 30, size: 8236 bytes +2025-10-29 10:25:01 [http-nio-8084-exec-4] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 31 +2025-10-29 10:25:01 [http-nio-8084-exec-4] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 31, size: 8236 bytes +2025-10-29 10:25:01 [http-nio-8084-exec-5] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 32 +2025-10-29 10:25:01 [http-nio-8084-exec-5] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 32, size: 8236 bytes +2025-10-29 10:25:01 [http-nio-8084-exec-6] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 33 +2025-10-29 10:25:01 [http-nio-8084-exec-6] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 33, size: 8236 bytes +2025-10-29 10:25:01 [http-nio-8084-exec-7] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 34 +2025-10-29 10:25:01 [http-nio-8084-exec-7] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 34, size: 8236 bytes +2025-10-29 10:25:02 [http-nio-8084-exec-8] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 35 +2025-10-29 10:25:02 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 35, size: 8236 bytes +2025-10-29 10:25:02 [http-nio-8084-exec-9] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 36 +2025-10-29 10:25:02 [http-nio-8084-exec-9] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 36, size: 8236 bytes +2025-10-29 10:25:02 [http-nio-8084-exec-10] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 37 +2025-10-29 10:25:02 [http-nio-8084-exec-10] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 37, size: 8236 bytes +2025-10-29 10:25:02 [http-nio-8084-exec-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 38 +2025-10-29 10:25:02 [http-nio-8084-exec-1] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 38, size: 8236 bytes +2025-10-29 10:25:03 [http-nio-8084-exec-2] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 39 +2025-10-29 10:25:03 [http-nio-8084-exec-2] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 39, size: 8236 bytes +2025-10-29 10:25:03 [http-nio-8084-exec-3] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 40 +2025-10-29 10:25:03 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 40, size: 8236 bytes +2025-10-29 10:25:03 [http-nio-8084-exec-4] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 41 +2025-10-29 10:25:03 [http-nio-8084-exec-4] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 41, size: 8236 bytes +2025-10-29 10:25:03 [http-nio-8084-exec-5] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 42 +2025-10-29 10:25:03 [http-nio-8084-exec-5] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 42, size: 8236 bytes +2025-10-29 10:25:04 [http-nio-8084-exec-6] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 43 +2025-10-29 10:25:04 [http-nio-8084-exec-6] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 43, size: 8236 bytes +2025-10-29 10:25:04 [http-nio-8084-exec-7] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 44 +2025-10-29 10:25:04 [http-nio-8084-exec-7] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 44, size: 8236 bytes +2025-10-29 10:25:04 [http-nio-8084-exec-8] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 45 +2025-10-29 10:25:04 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 45, size: 8236 bytes +2025-10-29 10:25:04 [http-nio-8084-exec-9] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 46 +2025-10-29 10:25:04 [http-nio-8084-exec-9] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 46, size: 8236 bytes +2025-10-29 10:25:05 [http-nio-8084-exec-10] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 47 +2025-10-29 10:25:05 [http-nio-8084-exec-10] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 47, size: 8236 bytes +2025-10-29 10:25:05 [http-nio-8084-exec-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 48 +2025-10-29 10:25:05 [http-nio-8084-exec-1] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 48, size: 8236 bytes +2025-10-29 10:25:05 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:25:05 [scheduling-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 조회 완료 - meetingId: test-meeting-001, count: 20 +2025-10-29 10:25:05 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 오디오 청크 조회 완료 - meetingId: test-meeting-001, chunks: 20개 +2025-10-29 10:25:05 [scheduling-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 병합 완료 - chunks: 20, totalSize: 164720 +2025-10-29 10:25:05 [scheduling-1] WARN c.u.h.stt.service.AzureSpeechService - Azure Speech Service 비활성화 - 시뮬레이션 결과 반환 +2025-10-29 10:25:05 [scheduling-1] INFO c.u.h.stt.service.AzureSpeechService - [시뮬레이션] 음성 인식 결과: 프로젝트 일정 조정이 필요할 것 같습니다. +2025-10-29 10:25:05 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - Event Hub 이벤트 발행 완료 - meetingId: test-meeting-001, text: 프로젝트 일정 조정이 필요할 것 같습니다. +2025-10-29 10:25:05 [ForkJoinPool.commonPool-worker-1] DEBUG c.u.h.s.e.p.EventHubPublisher - Event Hub 발행 시뮬레이션: +2025-10-29 10:25:05 [ForkJoinPool.commonPool-worker-1] DEBUG c.u.h.s.e.p.EventHubPublisher - Topic: transcription-events +2025-10-29 10:25:05 [ForkJoinPool.commonPool-worker-1] DEBUG c.u.h.s.e.p.EventHubPublisher - Event Data: {"eventId":"32ae8020-6189-49f3-966b-67f4ea679516","eventType":"SegmentCreated","segmentId":"89bd3b06-54fd-4fdf-965c-288d833d97ff","recordingId":"test-meeting-001","meetingId":"test-meeting-001","text":"프로젝트 일정 조정이 필요할 것 같습니다.","speakerId":"UNKNOWN","speakerName":"참석자","timestamp":[2025,10,29,10,25,5,538291000],"duration":5.0,"confidence":0.85,"warningFlag":false,"eventTime":[2025,10,29,10,25,5,538307000]} +2025-10-29 10:25:05 [ForkJoinPool.commonPool-worker-1] INFO c.u.h.s.e.p.EventHubPublisher - 이벤트 발행 완료 - topic: transcription-events, event: SegmentCreated +2025-10-29 10:25:05 [scheduling-1] INFO c.u.h.s.c.AudioWebSocketHandler - STT 결과 전송 완료 - meetingId: test-meeting-001, sessions: 1개, text: 프로젝트 일정 조정이 필요할 것 같습니다. +2025-10-29 10:25:05 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - WebSocket 결과 전송 완료 - meetingId: test-meeting-001, text: 프로젝트 일정 조정이 필요할 것 같습니다. +2025-10-29 10:25:05 [scheduling-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 삭제 완료 - meetingId: test-meeting-001 +2025-10-29 10:25:05 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 회의 처리 완료 - meetingId: test-meeting-001, text: 프로젝트 일정 조정이 필요할 것 같습니다. +2025-10-29 10:25:05 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:25:05 [http-nio-8084-exec-2] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 49 +2025-10-29 10:25:05 [http-nio-8084-exec-2] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 49, size: 8236 bytes +2025-10-29 10:25:05 [http-nio-8084-exec-3] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 50 +2025-10-29 10:25:05 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 50, size: 8236 bytes +2025-10-29 10:25:06 [http-nio-8084-exec-4] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 51 +2025-10-29 10:25:06 [http-nio-8084-exec-4] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 51, size: 8236 bytes +2025-10-29 10:25:06 [http-nio-8084-exec-5] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 52 +2025-10-29 10:25:06 [http-nio-8084-exec-5] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 52, size: 8236 bytes +2025-10-29 10:25:06 [http-nio-8084-exec-6] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 53 +2025-10-29 10:25:06 [http-nio-8084-exec-6] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 53, size: 8236 bytes +2025-10-29 10:25:06 [http-nio-8084-exec-7] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 54 +2025-10-29 10:25:06 [http-nio-8084-exec-7] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 54, size: 8236 bytes +2025-10-29 10:25:07 [http-nio-8084-exec-8] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 55 +2025-10-29 10:25:07 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 55, size: 8236 bytes +2025-10-29 10:25:07 [http-nio-8084-exec-9] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 56 +2025-10-29 10:25:07 [http-nio-8084-exec-9] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 56, size: 8236 bytes +2025-10-29 10:25:07 [http-nio-8084-exec-10] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 57 +2025-10-29 10:25:07 [http-nio-8084-exec-10] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 57, size: 8236 bytes +2025-10-29 10:25:07 [http-nio-8084-exec-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 58 +2025-10-29 10:25:07 [http-nio-8084-exec-1] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 58, size: 8236 bytes +2025-10-29 10:25:08 [http-nio-8084-exec-2] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 59 +2025-10-29 10:25:08 [http-nio-8084-exec-2] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 59, size: 8236 bytes +2025-10-29 10:25:08 [http-nio-8084-exec-3] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 60 +2025-10-29 10:25:08 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 60, size: 8236 bytes +2025-10-29 10:25:08 [http-nio-8084-exec-4] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 61 +2025-10-29 10:25:08 [http-nio-8084-exec-4] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 61, size: 8236 bytes +2025-10-29 10:25:08 [http-nio-8084-exec-5] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 62 +2025-10-29 10:25:08 [http-nio-8084-exec-5] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 62, size: 8236 bytes +2025-10-29 10:25:09 [http-nio-8084-exec-6] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 63 +2025-10-29 10:25:09 [http-nio-8084-exec-6] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 63, size: 8236 bytes +2025-10-29 10:25:09 [http-nio-8084-exec-7] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 64 +2025-10-29 10:25:09 [http-nio-8084-exec-7] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 64, size: 8236 bytes +2025-10-29 10:25:09 [http-nio-8084-exec-8] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 65 +2025-10-29 10:25:09 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 65, size: 8236 bytes +2025-10-29 10:25:09 [http-nio-8084-exec-9] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 66 +2025-10-29 10:25:09 [http-nio-8084-exec-9] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 66, size: 8236 bytes +2025-10-29 10:25:10 [http-nio-8084-exec-10] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 67 +2025-10-29 10:25:10 [http-nio-8084-exec-10] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 67, size: 8236 bytes +2025-10-29 10:25:10 [http-nio-8084-exec-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 68 +2025-10-29 10:25:10 [http-nio-8084-exec-1] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 68, size: 8236 bytes +2025-10-29 10:25:10 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:25:10 [scheduling-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 조회 완료 - meetingId: test-meeting-001, count: 20 +2025-10-29 10:25:10 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 오디오 청크 조회 완료 - meetingId: test-meeting-001, chunks: 20개 +2025-10-29 10:25:10 [scheduling-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 병합 완료 - chunks: 20, totalSize: 164720 +2025-10-29 10:25:10 [scheduling-1] WARN c.u.h.stt.service.AzureSpeechService - Azure Speech Service 비활성화 - 시뮬레이션 결과 반환 +2025-10-29 10:25:10 [scheduling-1] INFO c.u.h.stt.service.AzureSpeechService - [시뮬레이션] 음성 인식 결과: 프로젝트 일정 조정이 필요할 것 같습니다. +2025-10-29 10:25:10 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - Event Hub 이벤트 발행 완료 - meetingId: test-meeting-001, text: 프로젝트 일정 조정이 필요할 것 같습니다. +2025-10-29 10:25:10 [ForkJoinPool.commonPool-worker-1] DEBUG c.u.h.s.e.p.EventHubPublisher - Event Hub 발행 시뮬레이션: +2025-10-29 10:25:10 [ForkJoinPool.commonPool-worker-1] DEBUG c.u.h.s.e.p.EventHubPublisher - Topic: transcription-events +2025-10-29 10:25:10 [ForkJoinPool.commonPool-worker-1] DEBUG c.u.h.s.e.p.EventHubPublisher - Event Data: {"eventId":"8e3934c5-b0d5-4996-86df-1833bf94feaa","eventType":"SegmentCreated","segmentId":"5505078e-a479-4d9d-ac0d-946106d24b98","recordingId":"test-meeting-001","meetingId":"test-meeting-001","text":"프로젝트 일정 조정이 필요할 것 같습니다.","speakerId":"UNKNOWN","speakerName":"참석자","timestamp":[2025,10,29,10,25,10,674709000],"duration":5.0,"confidence":0.85,"warningFlag":false,"eventTime":[2025,10,29,10,25,10,674738000]} +2025-10-29 10:25:10 [ForkJoinPool.commonPool-worker-1] INFO c.u.h.s.e.p.EventHubPublisher - 이벤트 발행 완료 - topic: transcription-events, event: SegmentCreated +2025-10-29 10:25:10 [scheduling-1] INFO c.u.h.s.c.AudioWebSocketHandler - STT 결과 전송 완료 - meetingId: test-meeting-001, sessions: 1개, text: 프로젝트 일정 조정이 필요할 것 같습니다. +2025-10-29 10:25:10 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - WebSocket 결과 전송 완료 - meetingId: test-meeting-001, text: 프로젝트 일정 조정이 필요할 것 같습니다. +2025-10-29 10:25:10 [scheduling-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 삭제 완료 - meetingId: test-meeting-001 +2025-10-29 10:25:10 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 회의 처리 완료 - meetingId: test-meeting-001, text: 프로젝트 일정 조정이 필요할 것 같습니다. +2025-10-29 10:25:10 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:25:10 [http-nio-8084-exec-2] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 69 +2025-10-29 10:25:10 [http-nio-8084-exec-2] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 69, size: 8236 bytes +2025-10-29 10:25:11 [http-nio-8084-exec-3] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 70 +2025-10-29 10:25:11 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 70, size: 8236 bytes +2025-10-29 10:25:11 [http-nio-8084-exec-4] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 71 +2025-10-29 10:25:11 [http-nio-8084-exec-4] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 71, size: 8236 bytes +2025-10-29 10:25:11 [http-nio-8084-exec-5] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 72 +2025-10-29 10:25:11 [http-nio-8084-exec-5] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 72, size: 8236 bytes +2025-10-29 10:25:11 [http-nio-8084-exec-6] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 73 +2025-10-29 10:25:11 [http-nio-8084-exec-6] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 73, size: 8236 bytes +2025-10-29 10:25:12 [http-nio-8084-exec-7] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 74 +2025-10-29 10:25:12 [http-nio-8084-exec-7] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 74, size: 8236 bytes +2025-10-29 10:25:12 [http-nio-8084-exec-8] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 75 +2025-10-29 10:25:12 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 75, size: 8236 bytes +2025-10-29 10:25:12 [http-nio-8084-exec-9] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 76 +2025-10-29 10:25:12 [http-nio-8084-exec-9] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 76, size: 8236 bytes +2025-10-29 10:25:12 [http-nio-8084-exec-10] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 77 +2025-10-29 10:25:12 [http-nio-8084-exec-10] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 77, size: 8236 bytes +2025-10-29 10:25:13 [http-nio-8084-exec-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 78 +2025-10-29 10:25:13 [http-nio-8084-exec-1] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 78, size: 8236 bytes +2025-10-29 10:25:13 [http-nio-8084-exec-2] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 79 +2025-10-29 10:25:13 [http-nio-8084-exec-2] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 79, size: 8236 bytes +2025-10-29 10:25:13 [http-nio-8084-exec-3] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 80 +2025-10-29 10:25:13 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 80, size: 8236 bytes +2025-10-29 10:25:13 [http-nio-8084-exec-4] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 81 +2025-10-29 10:25:13 [http-nio-8084-exec-4] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 81, size: 8236 bytes +2025-10-29 10:25:14 [http-nio-8084-exec-5] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 82 +2025-10-29 10:25:14 [http-nio-8084-exec-5] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 82, size: 8236 bytes +2025-10-29 10:25:14 [http-nio-8084-exec-6] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 83 +2025-10-29 10:25:14 [http-nio-8084-exec-6] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 83, size: 8236 bytes +2025-10-29 10:25:14 [http-nio-8084-exec-7] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 84 +2025-10-29 10:25:14 [http-nio-8084-exec-7] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 84, size: 8236 bytes +2025-10-29 10:25:14 [http-nio-8084-exec-8] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 85 +2025-10-29 10:25:14 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 85, size: 8236 bytes +2025-10-29 10:25:15 [http-nio-8084-exec-9] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 86 +2025-10-29 10:25:15 [http-nio-8084-exec-9] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 86, size: 8236 bytes +2025-10-29 10:25:15 [http-nio-8084-exec-10] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 87 +2025-10-29 10:25:15 [http-nio-8084-exec-10] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 87, size: 8236 bytes +2025-10-29 10:25:15 [http-nio-8084-exec-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 88 +2025-10-29 10:25:15 [http-nio-8084-exec-1] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 88, size: 8236 bytes +2025-10-29 10:25:15 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:25:15 [scheduling-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 조회 완료 - meetingId: test-meeting-001, count: 20 +2025-10-29 10:25:15 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 오디오 청크 조회 완료 - meetingId: test-meeting-001, chunks: 20개 +2025-10-29 10:25:15 [scheduling-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 병합 완료 - chunks: 20, totalSize: 164720 +2025-10-29 10:25:15 [scheduling-1] WARN c.u.h.stt.service.AzureSpeechService - Azure Speech Service 비활성화 - 시뮬레이션 결과 반환 +2025-10-29 10:25:15 [scheduling-1] INFO c.u.h.stt.service.AzureSpeechService - [시뮬레이션] 음성 인식 결과: 마케팅 예산 배분 계획을 수립해야 합니다. +2025-10-29 10:25:15 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - Event Hub 이벤트 발행 완료 - meetingId: test-meeting-001, text: 마케팅 예산 배분 계획을 수립해야 합니다. +2025-10-29 10:25:15 [ForkJoinPool.commonPool-worker-1] DEBUG c.u.h.s.e.p.EventHubPublisher - Event Hub 발행 시뮬레이션: +2025-10-29 10:25:15 [ForkJoinPool.commonPool-worker-1] DEBUG c.u.h.s.e.p.EventHubPublisher - Topic: transcription-events +2025-10-29 10:25:15 [ForkJoinPool.commonPool-worker-1] DEBUG c.u.h.s.e.p.EventHubPublisher - Event Data: {"eventId":"864da875-593f-4d5a-a2c8-b25d8576cc30","eventType":"SegmentCreated","segmentId":"aff74603-c42e-447b-8a75-4adf26bb50bc","recordingId":"test-meeting-001","meetingId":"test-meeting-001","text":"마케팅 예산 배분 계획을 수립해야 합니다.","speakerId":"UNKNOWN","speakerName":"참석자","timestamp":[2025,10,29,10,25,15,855576000],"duration":5.0,"confidence":0.85,"warningFlag":false,"eventTime":[2025,10,29,10,25,15,855598000]} +2025-10-29 10:25:15 [ForkJoinPool.commonPool-worker-1] INFO c.u.h.s.e.p.EventHubPublisher - 이벤트 발행 완료 - topic: transcription-events, event: SegmentCreated +2025-10-29 10:25:15 [scheduling-1] INFO c.u.h.s.c.AudioWebSocketHandler - STT 결과 전송 완료 - meetingId: test-meeting-001, sessions: 1개, text: 마케팅 예산 배분 계획을 수립해야 합니다. +2025-10-29 10:25:15 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - WebSocket 결과 전송 완료 - meetingId: test-meeting-001, text: 마케팅 예산 배분 계획을 수립해야 합니다. +2025-10-29 10:25:15 [scheduling-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 삭제 완료 - meetingId: test-meeting-001 +2025-10-29 10:25:15 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 회의 처리 완료 - meetingId: test-meeting-001, text: 마케팅 예산 배분 계획을 수립해야 합니다. +2025-10-29 10:25:15 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:25:15 [http-nio-8084-exec-2] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 89 +2025-10-29 10:25:15 [http-nio-8084-exec-2] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 89, size: 8236 bytes +2025-10-29 10:25:16 [http-nio-8084-exec-3] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 90 +2025-10-29 10:25:16 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 90, size: 8236 bytes +2025-10-29 10:25:16 [http-nio-8084-exec-4] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 91 +2025-10-29 10:25:16 [http-nio-8084-exec-4] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 91, size: 8236 bytes +2025-10-29 10:25:16 [http-nio-8084-exec-5] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 92 +2025-10-29 10:25:16 [http-nio-8084-exec-5] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 92, size: 8236 bytes +2025-10-29 10:25:16 [http-nio-8084-exec-6] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 93 +2025-10-29 10:25:16 [http-nio-8084-exec-6] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 93, size: 8236 bytes +2025-10-29 10:25:17 [http-nio-8084-exec-7] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 94 +2025-10-29 10:25:17 [http-nio-8084-exec-7] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 94, size: 8236 bytes +2025-10-29 10:25:17 [http-nio-8084-exec-8] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 95 +2025-10-29 10:25:17 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 95, size: 8236 bytes +2025-10-29 10:25:17 [http-nio-8084-exec-9] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 96 +2025-10-29 10:25:17 [http-nio-8084-exec-9] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 96, size: 8236 bytes +2025-10-29 10:25:17 [http-nio-8084-exec-10] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 97 +2025-10-29 10:25:17 [http-nio-8084-exec-10] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 97, size: 8236 bytes +2025-10-29 10:25:18 [http-nio-8084-exec-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 98 +2025-10-29 10:25:18 [http-nio-8084-exec-1] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 98, size: 8236 bytes +2025-10-29 10:25:18 [http-nio-8084-exec-2] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 99 +2025-10-29 10:25:18 [http-nio-8084-exec-2] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 99, size: 8236 bytes +2025-10-29 10:25:18 [http-nio-8084-exec-3] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 100 +2025-10-29 10:25:18 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 100, size: 8236 bytes +2025-10-29 10:25:18 [http-nio-8084-exec-4] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 101 +2025-10-29 10:25:18 [http-nio-8084-exec-4] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 101, size: 8236 bytes +2025-10-29 10:25:19 [http-nio-8084-exec-5] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 102 +2025-10-29 10:25:19 [http-nio-8084-exec-5] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 102, size: 8236 bytes +2025-10-29 10:25:19 [http-nio-8084-exec-6] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 103 +2025-10-29 10:25:19 [http-nio-8084-exec-6] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 103, size: 8236 bytes +2025-10-29 10:25:19 [http-nio-8084-exec-7] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 104 +2025-10-29 10:25:19 [http-nio-8084-exec-7] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 104, size: 8236 bytes +2025-10-29 10:25:19 [http-nio-8084-exec-8] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 105 +2025-10-29 10:25:19 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 105, size: 8236 bytes +2025-10-29 10:25:20 [http-nio-8084-exec-9] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 106 +2025-10-29 10:25:20 [http-nio-8084-exec-9] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 106, size: 8236 bytes +2025-10-29 10:25:20 [http-nio-8084-exec-10] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 107 +2025-10-29 10:25:20 [http-nio-8084-exec-10] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 107, size: 8236 bytes +2025-10-29 10:25:20 [http-nio-8084-exec-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 108 +2025-10-29 10:25:20 [http-nio-8084-exec-1] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 108, size: 8236 bytes +2025-10-29 10:25:20 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:25:20 [scheduling-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 조회 완료 - meetingId: test-meeting-001, count: 19 +2025-10-29 10:25:20 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 오디오 청크 조회 완료 - meetingId: test-meeting-001, chunks: 19개 +2025-10-29 10:25:20 [scheduling-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 병합 완료 - chunks: 19, totalSize: 156484 +2025-10-29 10:25:20 [scheduling-1] WARN c.u.h.stt.service.AzureSpeechService - Azure Speech Service 비활성화 - 시뮬레이션 결과 반환 +2025-10-29 10:25:20 [scheduling-1] INFO c.u.h.stt.service.AzureSpeechService - [시뮬레이션] 음성 인식 결과: 마케팅 예산 배분 계획을 수립해야 합니다. +2025-10-29 10:25:20 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - Event Hub 이벤트 발행 완료 - meetingId: test-meeting-001, text: 마케팅 예산 배분 계획을 수립해야 합니다. +2025-10-29 10:25:20 [ForkJoinPool.commonPool-worker-1] DEBUG c.u.h.s.e.p.EventHubPublisher - Event Hub 발행 시뮬레이션: +2025-10-29 10:25:20 [ForkJoinPool.commonPool-worker-1] DEBUG c.u.h.s.e.p.EventHubPublisher - Topic: transcription-events +2025-10-29 10:25:20 [ForkJoinPool.commonPool-worker-1] DEBUG c.u.h.s.e.p.EventHubPublisher - Event Data: {"eventId":"1af31e4d-9fca-4409-9c9e-860a1e87e90c","eventType":"SegmentCreated","segmentId":"89abcc81-2d6d-4765-973b-372d191a87c6","recordingId":"test-meeting-001","meetingId":"test-meeting-001","text":"마케팅 예산 배분 계획을 수립해야 합니다.","speakerId":"UNKNOWN","speakerName":"참석자","timestamp":[2025,10,29,10,25,20,937454000],"duration":5.0,"confidence":0.85,"warningFlag":false,"eventTime":[2025,10,29,10,25,20,937487000]} +2025-10-29 10:25:20 [ForkJoinPool.commonPool-worker-1] INFO c.u.h.s.e.p.EventHubPublisher - 이벤트 발행 완료 - topic: transcription-events, event: SegmentCreated +2025-10-29 10:25:20 [scheduling-1] INFO c.u.h.s.c.AudioWebSocketHandler - STT 결과 전송 완료 - meetingId: test-meeting-001, sessions: 1개, text: 마케팅 예산 배분 계획을 수립해야 합니다. +2025-10-29 10:25:20 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - WebSocket 결과 전송 완료 - meetingId: test-meeting-001, text: 마케팅 예산 배분 계획을 수립해야 합니다. +2025-10-29 10:25:20 [scheduling-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 삭제 완료 - meetingId: test-meeting-001 +2025-10-29 10:25:20 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 회의 처리 완료 - meetingId: test-meeting-001, text: 마케팅 예산 배분 계획을 수립해야 합니다. +2025-10-29 10:25:20 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:25:20 [http-nio-8084-exec-2] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 109 +2025-10-29 10:25:20 [http-nio-8084-exec-2] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 109, size: 8236 bytes +2025-10-29 10:25:21 [http-nio-8084-exec-3] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 110 +2025-10-29 10:25:21 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 110, size: 8236 bytes +2025-10-29 10:25:21 [http-nio-8084-exec-4] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 111 +2025-10-29 10:25:21 [http-nio-8084-exec-4] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 111, size: 8236 bytes +2025-10-29 10:25:21 [http-nio-8084-exec-5] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 112 +2025-10-29 10:25:21 [http-nio-8084-exec-5] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 112, size: 8236 bytes +2025-10-29 10:25:22 [http-nio-8084-exec-6] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 113 +2025-10-29 10:25:22 [http-nio-8084-exec-6] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 113, size: 8236 bytes +2025-10-29 10:25:22 [http-nio-8084-exec-7] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 114 +2025-10-29 10:25:22 [http-nio-8084-exec-7] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 114, size: 8236 bytes +2025-10-29 10:25:22 [http-nio-8084-exec-8] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 115 +2025-10-29 10:25:22 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 115, size: 8236 bytes +2025-10-29 10:25:22 [http-nio-8084-exec-9] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 116 +2025-10-29 10:25:22 [http-nio-8084-exec-9] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 116, size: 8236 bytes +2025-10-29 10:25:23 [http-nio-8084-exec-10] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 117 +2025-10-29 10:25:23 [http-nio-8084-exec-10] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 117, size: 8236 bytes +2025-10-29 10:25:23 [http-nio-8084-exec-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 118 +2025-10-29 10:25:23 [http-nio-8084-exec-1] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 118, size: 8236 bytes +2025-10-29 10:25:23 [http-nio-8084-exec-2] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 119 +2025-10-29 10:25:23 [http-nio-8084-exec-2] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 119, size: 8236 bytes +2025-10-29 10:25:23 [http-nio-8084-exec-3] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 120 +2025-10-29 10:25:23 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 120, size: 8236 bytes +2025-10-29 10:25:24 [http-nio-8084-exec-4] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 121 +2025-10-29 10:25:24 [http-nio-8084-exec-4] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 121, size: 8236 bytes +2025-10-29 10:25:24 [http-nio-8084-exec-5] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 122 +2025-10-29 10:25:24 [http-nio-8084-exec-5] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 122, size: 8236 bytes +2025-10-29 10:25:24 [http-nio-8084-exec-6] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 123 +2025-10-29 10:25:24 [http-nio-8084-exec-6] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 123, size: 8236 bytes +2025-10-29 10:25:24 [http-nio-8084-exec-7] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 124 +2025-10-29 10:25:24 [http-nio-8084-exec-7] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 124, size: 8236 bytes +2025-10-29 10:25:25 [http-nio-8084-exec-8] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 125 +2025-10-29 10:25:25 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 125, size: 8236 bytes +2025-10-29 10:25:25 [http-nio-8084-exec-9] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 126 +2025-10-29 10:25:25 [http-nio-8084-exec-9] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 126, size: 8236 bytes +2025-10-29 10:25:25 [http-nio-8084-exec-10] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 127 +2025-10-29 10:25:25 [http-nio-8084-exec-10] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 127, size: 8236 bytes +2025-10-29 10:25:25 [http-nio-8084-exec-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 128 +2025-10-29 10:25:25 [http-nio-8084-exec-1] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 128, size: 8236 bytes +2025-10-29 10:25:25 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:25:26 [scheduling-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 조회 완료 - meetingId: test-meeting-001, count: 20 +2025-10-29 10:25:26 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 오디오 청크 조회 완료 - meetingId: test-meeting-001, chunks: 20개 +2025-10-29 10:25:26 [scheduling-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 병합 완료 - chunks: 20, totalSize: 164720 +2025-10-29 10:25:26 [scheduling-1] WARN c.u.h.stt.service.AzureSpeechService - Azure Speech Service 비활성화 - 시뮬레이션 결과 반환 +2025-10-29 10:25:26 [scheduling-1] INFO c.u.h.stt.service.AzureSpeechService - [시뮬레이션] 음성 인식 결과: 기술 스택 선정에 대한 의견을 나누고 있습니다. +2025-10-29 10:25:26 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - Event Hub 이벤트 발행 완료 - meetingId: test-meeting-001, text: 기술 스택 선정에 대한 의견을 나누고 있습니다. +2025-10-29 10:25:26 [ForkJoinPool.commonPool-worker-1] DEBUG c.u.h.s.e.p.EventHubPublisher - Event Hub 발행 시뮬레이션: +2025-10-29 10:25:26 [ForkJoinPool.commonPool-worker-1] DEBUG c.u.h.s.e.p.EventHubPublisher - Topic: transcription-events +2025-10-29 10:25:26 [ForkJoinPool.commonPool-worker-1] DEBUG c.u.h.s.e.p.EventHubPublisher - Event Data: {"eventId":"7eb2094d-c8a4-4f26-a71c-68a58fc6eb61","eventType":"SegmentCreated","segmentId":"b2a02b59-9288-4b17-98df-2c73fbb048cc","recordingId":"test-meeting-001","meetingId":"test-meeting-001","text":"기술 스택 선정에 대한 의견을 나누고 있습니다.","speakerId":"UNKNOWN","speakerName":"참석자","timestamp":[2025,10,29,10,25,26,269853000],"duration":5.0,"confidence":0.85,"warningFlag":false,"eventTime":[2025,10,29,10,25,26,269879000]} +2025-10-29 10:25:26 [ForkJoinPool.commonPool-worker-1] INFO c.u.h.s.e.p.EventHubPublisher - 이벤트 발행 완료 - topic: transcription-events, event: SegmentCreated +2025-10-29 10:25:26 [scheduling-1] INFO c.u.h.s.c.AudioWebSocketHandler - STT 결과 전송 완료 - meetingId: test-meeting-001, sessions: 1개, text: 기술 스택 선정에 대한 의견을 나누고 있습니다. +2025-10-29 10:25:26 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - WebSocket 결과 전송 완료 - meetingId: test-meeting-001, text: 기술 스택 선정에 대한 의견을 나누고 있습니다. +2025-10-29 10:25:26 [scheduling-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 삭제 완료 - meetingId: test-meeting-001 +2025-10-29 10:25:26 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 회의 처리 완료 - meetingId: test-meeting-001, text: 기술 스택 선정에 대한 의견을 나누고 있습니다. +2025-10-29 10:25:26 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:25:26 [http-nio-8084-exec-2] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 129 +2025-10-29 10:25:26 [http-nio-8084-exec-2] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 129, size: 8236 bytes +2025-10-29 10:25:26 [http-nio-8084-exec-3] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 130 +2025-10-29 10:25:26 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 130, size: 8236 bytes +2025-10-29 10:25:26 [http-nio-8084-exec-4] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 131 +2025-10-29 10:25:26 [http-nio-8084-exec-4] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 131, size: 8236 bytes +2025-10-29 10:25:26 [http-nio-8084-exec-5] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 132 +2025-10-29 10:25:26 [http-nio-8084-exec-5] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 132, size: 8236 bytes +2025-10-29 10:25:27 [http-nio-8084-exec-6] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 133 +2025-10-29 10:25:27 [http-nio-8084-exec-6] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 133, size: 8236 bytes +2025-10-29 10:25:27 [http-nio-8084-exec-7] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 134 +2025-10-29 10:25:27 [http-nio-8084-exec-7] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 134, size: 8236 bytes +2025-10-29 10:25:27 [http-nio-8084-exec-8] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 135 +2025-10-29 10:25:27 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 135, size: 8236 bytes +2025-10-29 10:25:27 [http-nio-8084-exec-9] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 136 +2025-10-29 10:25:27 [http-nio-8084-exec-9] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 136, size: 8236 bytes +2025-10-29 10:25:28 [http-nio-8084-exec-10] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 137 +2025-10-29 10:25:28 [http-nio-8084-exec-10] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 137, size: 8236 bytes +2025-10-29 10:25:28 [http-nio-8084-exec-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 138 +2025-10-29 10:25:28 [http-nio-8084-exec-1] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 138, size: 8236 bytes +2025-10-29 10:25:28 [http-nio-8084-exec-2] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 139 +2025-10-29 10:25:28 [http-nio-8084-exec-2] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 139, size: 8236 bytes +2025-10-29 10:25:28 [http-nio-8084-exec-3] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 140 +2025-10-29 10:25:28 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 140, size: 8236 bytes +2025-10-29 10:25:29 [http-nio-8084-exec-4] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 141 +2025-10-29 10:25:29 [http-nio-8084-exec-4] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 141, size: 8236 bytes +2025-10-29 10:25:29 [http-nio-8084-exec-5] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 142 +2025-10-29 10:25:29 [http-nio-8084-exec-5] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 142, size: 8236 bytes +2025-10-29 10:25:29 [http-nio-8084-exec-6] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 143 +2025-10-29 10:25:29 [http-nio-8084-exec-6] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 143, size: 8236 bytes +2025-10-29 10:25:29 [http-nio-8084-exec-7] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 144 +2025-10-29 10:25:29 [http-nio-8084-exec-7] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 144, size: 8236 bytes +2025-10-29 10:25:30 [http-nio-8084-exec-8] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 145 +2025-10-29 10:25:30 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 145, size: 8236 bytes +2025-10-29 10:25:30 [http-nio-8084-exec-9] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 146 +2025-10-29 10:25:30 [http-nio-8084-exec-9] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 146, size: 8236 bytes +2025-10-29 10:25:30 [http-nio-8084-exec-10] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 147 +2025-10-29 10:25:30 [http-nio-8084-exec-10] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 147, size: 8236 bytes +2025-10-29 10:25:30 [http-nio-8084-exec-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 148 +2025-10-29 10:25:30 [http-nio-8084-exec-1] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 148, size: 8236 bytes +2025-10-29 10:25:31 [http-nio-8084-exec-2] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 149 +2025-10-29 10:25:31 [http-nio-8084-exec-2] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 149, size: 8236 bytes +2025-10-29 10:25:31 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:25:31 [scheduling-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 조회 완료 - meetingId: test-meeting-001, count: 20 +2025-10-29 10:25:31 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 오디오 청크 조회 완료 - meetingId: test-meeting-001, chunks: 20개 +2025-10-29 10:25:31 [scheduling-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 병합 완료 - chunks: 20, totalSize: 164720 +2025-10-29 10:25:31 [scheduling-1] WARN c.u.h.stt.service.AzureSpeechService - Azure Speech Service 비활성화 - 시뮬레이션 결과 반환 +2025-10-29 10:25:31 [scheduling-1] INFO c.u.h.stt.service.AzureSpeechService - [시뮬레이션] 음성 인식 결과: 기술 스택 선정에 대한 의견을 나누고 있습니다. +2025-10-29 10:25:31 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - Event Hub 이벤트 발행 완료 - meetingId: test-meeting-001, text: 기술 스택 선정에 대한 의견을 나누고 있습니다. +2025-10-29 10:25:31 [ForkJoinPool.commonPool-worker-1] DEBUG c.u.h.s.e.p.EventHubPublisher - Event Hub 발행 시뮬레이션: +2025-10-29 10:25:31 [ForkJoinPool.commonPool-worker-1] DEBUG c.u.h.s.e.p.EventHubPublisher - Topic: transcription-events +2025-10-29 10:25:31 [ForkJoinPool.commonPool-worker-1] DEBUG c.u.h.s.e.p.EventHubPublisher - Event Data: {"eventId":"87643bf1-ca9b-4ae5-93c3-16b316a72ea5","eventType":"SegmentCreated","segmentId":"a6d7b57d-d808-4fff-8489-4b097c057143","recordingId":"test-meeting-001","meetingId":"test-meeting-001","text":"기술 스택 선정에 대한 의견을 나누고 있습니다.","speakerId":"UNKNOWN","speakerName":"참석자","timestamp":[2025,10,29,10,25,31,426082000],"duration":5.0,"confidence":0.85,"warningFlag":false,"eventTime":[2025,10,29,10,25,31,426100000]} +2025-10-29 10:25:31 [ForkJoinPool.commonPool-worker-1] INFO c.u.h.s.e.p.EventHubPublisher - 이벤트 발행 완료 - topic: transcription-events, event: SegmentCreated +2025-10-29 10:25:31 [scheduling-1] INFO c.u.h.s.c.AudioWebSocketHandler - STT 결과 전송 완료 - meetingId: test-meeting-001, sessions: 1개, text: 기술 스택 선정에 대한 의견을 나누고 있습니다. +2025-10-29 10:25:31 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - WebSocket 결과 전송 완료 - meetingId: test-meeting-001, text: 기술 스택 선정에 대한 의견을 나누고 있습니다. +2025-10-29 10:25:31 [scheduling-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 삭제 완료 - meetingId: test-meeting-001 +2025-10-29 10:25:31 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 회의 처리 완료 - meetingId: test-meeting-001, text: 기술 스택 선정에 대한 의견을 나누고 있습니다. +2025-10-29 10:25:31 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:25:31 [http-nio-8084-exec-3] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 150 +2025-10-29 10:25:31 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 150, size: 8236 bytes +2025-10-29 10:25:31 [http-nio-8084-exec-4] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 151 +2025-10-29 10:25:31 [http-nio-8084-exec-4] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 151, size: 8236 bytes +2025-10-29 10:25:31 [http-nio-8084-exec-5] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 152 +2025-10-29 10:25:31 [http-nio-8084-exec-5] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 152, size: 8236 bytes +2025-10-29 10:25:32 [http-nio-8084-exec-6] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 153 +2025-10-29 10:25:32 [http-nio-8084-exec-6] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 153, size: 8236 bytes +2025-10-29 10:25:32 [http-nio-8084-exec-7] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 154 +2025-10-29 10:25:32 [http-nio-8084-exec-7] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 154, size: 8236 bytes +2025-10-29 10:25:32 [http-nio-8084-exec-8] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 155 +2025-10-29 10:25:32 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 155, size: 8236 bytes +2025-10-29 10:25:33 [http-nio-8084-exec-9] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 156 +2025-10-29 10:25:33 [http-nio-8084-exec-9] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 156, size: 8236 bytes +2025-10-29 10:25:33 [http-nio-8084-exec-10] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 157 +2025-10-29 10:25:33 [http-nio-8084-exec-10] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 157, size: 8236 bytes +2025-10-29 10:25:33 [http-nio-8084-exec-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 158 +2025-10-29 10:25:33 [http-nio-8084-exec-1] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 158, size: 8236 bytes +2025-10-29 10:25:33 [http-nio-8084-exec-2] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 159 +2025-10-29 10:25:33 [http-nio-8084-exec-2] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 159, size: 8236 bytes +2025-10-29 10:25:34 [http-nio-8084-exec-3] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 160 +2025-10-29 10:25:34 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 160, size: 8236 bytes +2025-10-29 10:25:34 [http-nio-8084-exec-4] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 161 +2025-10-29 10:25:34 [http-nio-8084-exec-4] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 161, size: 8236 bytes +2025-10-29 10:25:34 [http-nio-8084-exec-5] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 162 +2025-10-29 10:25:34 [http-nio-8084-exec-5] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 162, size: 8236 bytes +2025-10-29 10:25:34 [http-nio-8084-exec-6] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 163 +2025-10-29 10:25:34 [http-nio-8084-exec-6] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 163, size: 8236 bytes +2025-10-29 10:25:35 [http-nio-8084-exec-7] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 164 +2025-10-29 10:25:35 [http-nio-8084-exec-7] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 164, size: 8236 bytes +2025-10-29 10:25:35 [http-nio-8084-exec-8] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 165 +2025-10-29 10:25:35 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 165, size: 8236 bytes +2025-10-29 10:25:35 [http-nio-8084-exec-9] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 166 +2025-10-29 10:25:35 [http-nio-8084-exec-9] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 166, size: 8236 bytes +2025-10-29 10:25:35 [http-nio-8084-exec-10] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 167 +2025-10-29 10:25:35 [http-nio-8084-exec-10] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 167, size: 8236 bytes +2025-10-29 10:25:36 [http-nio-8084-exec-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 168 +2025-10-29 10:25:36 [http-nio-8084-exec-1] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 168, size: 8236 bytes +2025-10-29 10:25:36 [http-nio-8084-exec-2] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 169 +2025-10-29 10:25:36 [http-nio-8084-exec-2] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 169, size: 8236 bytes +2025-10-29 10:25:36 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:25:36 [scheduling-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 조회 완료 - meetingId: test-meeting-001, count: 20 +2025-10-29 10:25:36 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 오디오 청크 조회 완료 - meetingId: test-meeting-001, chunks: 20개 +2025-10-29 10:25:36 [scheduling-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 병합 완료 - chunks: 20, totalSize: 164720 +2025-10-29 10:25:36 [scheduling-1] WARN c.u.h.stt.service.AzureSpeechService - Azure Speech Service 비활성화 - 시뮬레이션 결과 반환 +2025-10-29 10:25:36 [scheduling-1] INFO c.u.h.stt.service.AzureSpeechService - [시뮬레이션] 음성 인식 결과: 신제품 개발 일정에 대해 논의하고 있습니다. +2025-10-29 10:25:36 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - Event Hub 이벤트 발행 완료 - meetingId: test-meeting-001, text: 신제품 개발 일정에 대해 논의하고 있습니다. +2025-10-29 10:25:36 [ForkJoinPool.commonPool-worker-1] DEBUG c.u.h.s.e.p.EventHubPublisher - Event Hub 발행 시뮬레이션: +2025-10-29 10:25:36 [ForkJoinPool.commonPool-worker-1] DEBUG c.u.h.s.e.p.EventHubPublisher - Topic: transcription-events +2025-10-29 10:25:36 [ForkJoinPool.commonPool-worker-1] DEBUG c.u.h.s.e.p.EventHubPublisher - Event Data: {"eventId":"7436b96c-3a60-418b-848d-727770d7cfd9","eventType":"SegmentCreated","segmentId":"9483cf8a-e41e-49e9-b2c0-28519bba798d","recordingId":"test-meeting-001","meetingId":"test-meeting-001","text":"신제품 개발 일정에 대해 논의하고 있습니다.","speakerId":"UNKNOWN","speakerName":"참석자","timestamp":[2025,10,29,10,25,36,579030000],"duration":5.0,"confidence":0.85,"warningFlag":false,"eventTime":[2025,10,29,10,25,36,579072000]} +2025-10-29 10:25:36 [ForkJoinPool.commonPool-worker-1] INFO c.u.h.s.e.p.EventHubPublisher - 이벤트 발행 완료 - topic: transcription-events, event: SegmentCreated +2025-10-29 10:25:36 [scheduling-1] INFO c.u.h.s.c.AudioWebSocketHandler - STT 결과 전송 완료 - meetingId: test-meeting-001, sessions: 1개, text: 신제품 개발 일정에 대해 논의하고 있습니다. +2025-10-29 10:25:36 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - WebSocket 결과 전송 완료 - meetingId: test-meeting-001, text: 신제품 개발 일정에 대해 논의하고 있습니다. +2025-10-29 10:25:36 [scheduling-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 삭제 완료 - meetingId: test-meeting-001 +2025-10-29 10:25:36 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 회의 처리 완료 - meetingId: test-meeting-001, text: 신제품 개발 일정에 대해 논의하고 있습니다. +2025-10-29 10:25:36 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:25:36 [http-nio-8084-exec-3] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 170 +2025-10-29 10:25:36 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 170, size: 8236 bytes +2025-10-29 10:25:36 [http-nio-8084-exec-4] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 171 +2025-10-29 10:25:36 [http-nio-8084-exec-4] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 171, size: 8236 bytes +2025-10-29 10:25:37 [http-nio-8084-exec-5] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 172 +2025-10-29 10:25:37 [http-nio-8084-exec-5] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 172, size: 8236 bytes +2025-10-29 10:25:37 [http-nio-8084-exec-6] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 173 +2025-10-29 10:25:37 [http-nio-8084-exec-6] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 173, size: 8236 bytes +2025-10-29 10:25:37 [http-nio-8084-exec-7] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 174 +2025-10-29 10:25:37 [http-nio-8084-exec-7] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 174, size: 8236 bytes +2025-10-29 10:25:37 [http-nio-8084-exec-8] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 175 +2025-10-29 10:25:37 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 175, size: 8236 bytes +2025-10-29 10:25:38 [http-nio-8084-exec-9] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 176 +2025-10-29 10:25:38 [http-nio-8084-exec-9] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 176, size: 8236 bytes +2025-10-29 10:25:38 [http-nio-8084-exec-10] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 177 +2025-10-29 10:25:38 [http-nio-8084-exec-10] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 177, size: 8236 bytes +2025-10-29 10:25:38 [http-nio-8084-exec-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 178 +2025-10-29 10:25:38 [http-nio-8084-exec-1] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 178, size: 8236 bytes +2025-10-29 10:25:38 [http-nio-8084-exec-2] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 179 +2025-10-29 10:25:38 [http-nio-8084-exec-2] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 179, size: 8236 bytes +2025-10-29 10:25:39 [http-nio-8084-exec-3] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 180 +2025-10-29 10:25:39 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 180, size: 8236 bytes +2025-10-29 10:25:39 [http-nio-8084-exec-4] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 181 +2025-10-29 10:25:39 [http-nio-8084-exec-4] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 181, size: 8236 bytes +2025-10-29 10:25:39 [http-nio-8084-exec-5] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 182 +2025-10-29 10:25:39 [http-nio-8084-exec-5] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 182, size: 8236 bytes +2025-10-29 10:25:39 [http-nio-8084-exec-6] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 183 +2025-10-29 10:25:39 [http-nio-8084-exec-6] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 183, size: 8236 bytes +2025-10-29 10:25:40 [http-nio-8084-exec-7] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 184 +2025-10-29 10:25:40 [http-nio-8084-exec-7] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 184, size: 8236 bytes +2025-10-29 10:25:40 [http-nio-8084-exec-8] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 185 +2025-10-29 10:25:40 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 185, size: 8236 bytes +2025-10-29 10:25:40 [http-nio-8084-exec-9] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 186 +2025-10-29 10:25:40 [http-nio-8084-exec-9] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 186, size: 8236 bytes +2025-10-29 10:25:40 [http-nio-8084-exec-10] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 187 +2025-10-29 10:25:40 [http-nio-8084-exec-10] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 187, size: 8236 bytes +2025-10-29 10:25:41 [http-nio-8084-exec-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 188 +2025-10-29 10:25:41 [http-nio-8084-exec-1] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 188, size: 8236 bytes +2025-10-29 10:25:41 [http-nio-8084-exec-2] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 189 +2025-10-29 10:25:41 [http-nio-8084-exec-2] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 189, size: 8236 bytes +2025-10-29 10:25:41 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:25:41 [scheduling-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 조회 완료 - meetingId: test-meeting-001, count: 19 +2025-10-29 10:25:41 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 오디오 청크 조회 완료 - meetingId: test-meeting-001, chunks: 19개 +2025-10-29 10:25:41 [scheduling-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 병합 완료 - chunks: 19, totalSize: 156484 +2025-10-29 10:25:41 [scheduling-1] WARN c.u.h.stt.service.AzureSpeechService - Azure Speech Service 비활성화 - 시뮬레이션 결과 반환 +2025-10-29 10:25:41 [scheduling-1] INFO c.u.h.stt.service.AzureSpeechService - [시뮬레이션] 음성 인식 결과: 기술 스택 선정에 대한 의견을 나누고 있습니다. +2025-10-29 10:25:41 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - Event Hub 이벤트 발행 완료 - meetingId: test-meeting-001, text: 기술 스택 선정에 대한 의견을 나누고 있습니다. +2025-10-29 10:25:41 [ForkJoinPool.commonPool-worker-1] DEBUG c.u.h.s.e.p.EventHubPublisher - Event Hub 발행 시뮬레이션: +2025-10-29 10:25:41 [ForkJoinPool.commonPool-worker-1] DEBUG c.u.h.s.e.p.EventHubPublisher - Topic: transcription-events +2025-10-29 10:25:41 [ForkJoinPool.commonPool-worker-1] DEBUG c.u.h.s.e.p.EventHubPublisher - Event Data: {"eventId":"c8dd551c-5654-4fe3-9a8c-65b99a65701d","eventType":"SegmentCreated","segmentId":"ebd20dc2-c3ba-4889-9d8a-ff8a6cae5f23","recordingId":"test-meeting-001","meetingId":"test-meeting-001","text":"기술 스택 선정에 대한 의견을 나누고 있습니다.","speakerId":"UNKNOWN","speakerName":"참석자","timestamp":[2025,10,29,10,25,41,676763000],"duration":5.0,"confidence":0.85,"warningFlag":false,"eventTime":[2025,10,29,10,25,41,676861000]} +2025-10-29 10:25:41 [ForkJoinPool.commonPool-worker-1] INFO c.u.h.s.e.p.EventHubPublisher - 이벤트 발행 완료 - topic: transcription-events, event: SegmentCreated +2025-10-29 10:25:41 [scheduling-1] INFO c.u.h.s.c.AudioWebSocketHandler - STT 결과 전송 완료 - meetingId: test-meeting-001, sessions: 1개, text: 기술 스택 선정에 대한 의견을 나누고 있습니다. +2025-10-29 10:25:41 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - WebSocket 결과 전송 완료 - meetingId: test-meeting-001, text: 기술 스택 선정에 대한 의견을 나누고 있습니다. +2025-10-29 10:25:41 [scheduling-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 삭제 완료 - meetingId: test-meeting-001 +2025-10-29 10:25:41 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 회의 처리 완료 - meetingId: test-meeting-001, text: 기술 스택 선정에 대한 의견을 나누고 있습니다. +2025-10-29 10:25:41 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:25:41 [http-nio-8084-exec-3] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 190 +2025-10-29 10:25:41 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 190, size: 8236 bytes +2025-10-29 10:25:41 [http-nio-8084-exec-4] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 191 +2025-10-29 10:25:41 [http-nio-8084-exec-4] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 191, size: 8236 bytes +2025-10-29 10:25:42 [http-nio-8084-exec-5] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 192 +2025-10-29 10:25:42 [http-nio-8084-exec-5] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 192, size: 8236 bytes +2025-10-29 10:25:42 [http-nio-8084-exec-6] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 193 +2025-10-29 10:25:42 [http-nio-8084-exec-6] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 193, size: 8236 bytes +2025-10-29 10:25:42 [http-nio-8084-exec-7] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 194 +2025-10-29 10:25:42 [http-nio-8084-exec-7] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 194, size: 8236 bytes +2025-10-29 10:25:42 [http-nio-8084-exec-8] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 195 +2025-10-29 10:25:42 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 195, size: 8236 bytes +2025-10-29 10:25:43 [http-nio-8084-exec-9] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 196 +2025-10-29 10:25:43 [http-nio-8084-exec-9] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 196, size: 8236 bytes +2025-10-29 10:25:43 [http-nio-8084-exec-10] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 197 +2025-10-29 10:25:43 [http-nio-8084-exec-10] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 197, size: 8236 bytes +2025-10-29 10:25:43 [http-nio-8084-exec-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 198 +2025-10-29 10:25:43 [http-nio-8084-exec-1] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 198, size: 8236 bytes +2025-10-29 10:25:44 [http-nio-8084-exec-2] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 199 +2025-10-29 10:25:44 [http-nio-8084-exec-2] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 199, size: 8236 bytes +2025-10-29 10:25:44 [http-nio-8084-exec-3] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 200 +2025-10-29 10:25:44 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 200, size: 8236 bytes +2025-10-29 10:25:44 [http-nio-8084-exec-4] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 201 +2025-10-29 10:25:44 [http-nio-8084-exec-4] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 201, size: 8236 bytes +2025-10-29 10:25:44 [http-nio-8084-exec-5] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 202 +2025-10-29 10:25:44 [http-nio-8084-exec-5] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 202, size: 8236 bytes +2025-10-29 10:25:45 [http-nio-8084-exec-6] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 203 +2025-10-29 10:25:45 [http-nio-8084-exec-6] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 203, size: 8236 bytes +2025-10-29 10:25:45 [http-nio-8084-exec-7] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 204 +2025-10-29 10:25:45 [http-nio-8084-exec-7] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 204, size: 8236 bytes +2025-10-29 10:25:45 [http-nio-8084-exec-8] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 205 +2025-10-29 10:25:45 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 205, size: 8236 bytes +2025-10-29 10:25:45 [http-nio-8084-exec-9] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 206 +2025-10-29 10:25:45 [http-nio-8084-exec-9] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 206, size: 8236 bytes +2025-10-29 10:25:46 [http-nio-8084-exec-10] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 207 +2025-10-29 10:25:46 [http-nio-8084-exec-10] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 207, size: 8236 bytes +2025-10-29 10:25:46 [http-nio-8084-exec-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 208 +2025-10-29 10:25:46 [http-nio-8084-exec-1] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 208, size: 8236 bytes +2025-10-29 10:25:46 [http-nio-8084-exec-2] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 209 +2025-10-29 10:25:46 [http-nio-8084-exec-2] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 209, size: 8236 bytes +2025-10-29 10:25:46 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:25:46 [scheduling-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 조회 완료 - meetingId: test-meeting-001, count: 19 +2025-10-29 10:25:46 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 오디오 청크 조회 완료 - meetingId: test-meeting-001, chunks: 19개 +2025-10-29 10:25:46 [scheduling-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 병합 완료 - chunks: 19, totalSize: 156484 +2025-10-29 10:25:46 [scheduling-1] WARN c.u.h.stt.service.AzureSpeechService - Azure Speech Service 비활성화 - 시뮬레이션 결과 반환 +2025-10-29 10:25:46 [scheduling-1] INFO c.u.h.stt.service.AzureSpeechService - [시뮬레이션] 음성 인식 결과: 마케팅 예산 배분 계획을 수립해야 합니다. +2025-10-29 10:25:46 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - Event Hub 이벤트 발행 완료 - meetingId: test-meeting-001, text: 마케팅 예산 배분 계획을 수립해야 합니다. +2025-10-29 10:25:46 [ForkJoinPool.commonPool-worker-1] DEBUG c.u.h.s.e.p.EventHubPublisher - Event Hub 발행 시뮬레이션: +2025-10-29 10:25:46 [ForkJoinPool.commonPool-worker-1] DEBUG c.u.h.s.e.p.EventHubPublisher - Topic: transcription-events +2025-10-29 10:25:46 [ForkJoinPool.commonPool-worker-1] DEBUG c.u.h.s.e.p.EventHubPublisher - Event Data: {"eventId":"67684f2d-360c-482b-80bc-51efb0578596","eventType":"SegmentCreated","segmentId":"62fd5a43-ded0-4643-8c3e-b820e05a30ae","recordingId":"test-meeting-001","meetingId":"test-meeting-001","text":"마케팅 예산 배분 계획을 수립해야 합니다.","speakerId":"UNKNOWN","speakerName":"참석자","timestamp":[2025,10,29,10,25,46,843697000],"duration":5.0,"confidence":0.85,"warningFlag":false,"eventTime":[2025,10,29,10,25,46,843748000]} +2025-10-29 10:25:46 [ForkJoinPool.commonPool-worker-1] INFO c.u.h.s.e.p.EventHubPublisher - 이벤트 발행 완료 - topic: transcription-events, event: SegmentCreated +2025-10-29 10:25:46 [scheduling-1] INFO c.u.h.s.c.AudioWebSocketHandler - STT 결과 전송 완료 - meetingId: test-meeting-001, sessions: 1개, text: 마케팅 예산 배분 계획을 수립해야 합니다. +2025-10-29 10:25:46 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - WebSocket 결과 전송 완료 - meetingId: test-meeting-001, text: 마케팅 예산 배분 계획을 수립해야 합니다. +2025-10-29 10:25:46 [scheduling-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 삭제 완료 - meetingId: test-meeting-001 +2025-10-29 10:25:46 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 회의 처리 완료 - meetingId: test-meeting-001, text: 마케팅 예산 배분 계획을 수립해야 합니다. +2025-10-29 10:25:46 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:25:46 [http-nio-8084-exec-3] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 210 +2025-10-29 10:25:46 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 210, size: 8236 bytes +2025-10-29 10:25:47 [http-nio-8084-exec-4] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 211 +2025-10-29 10:25:47 [http-nio-8084-exec-4] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 211, size: 8236 bytes +2025-10-29 10:25:47 [http-nio-8084-exec-5] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 212 +2025-10-29 10:25:47 [http-nio-8084-exec-5] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 212, size: 8236 bytes +2025-10-29 10:25:47 [http-nio-8084-exec-6] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 213 +2025-10-29 10:25:47 [http-nio-8084-exec-6] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 213, size: 8236 bytes +2025-10-29 10:25:47 [http-nio-8084-exec-7] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 214 +2025-10-29 10:25:47 [http-nio-8084-exec-7] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 214, size: 8236 bytes +2025-10-29 10:25:48 [http-nio-8084-exec-8] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 215 +2025-10-29 10:25:48 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 215, size: 8236 bytes +2025-10-29 10:25:48 [http-nio-8084-exec-9] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 216 +2025-10-29 10:25:48 [http-nio-8084-exec-9] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 216, size: 8236 bytes +2025-10-29 10:25:48 [http-nio-8084-exec-10] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 217 +2025-10-29 10:25:48 [http-nio-8084-exec-10] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 217, size: 8236 bytes +2025-10-29 10:25:48 [http-nio-8084-exec-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 218 +2025-10-29 10:25:48 [http-nio-8084-exec-1] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 218, size: 8236 bytes +2025-10-29 10:25:49 [http-nio-8084-exec-2] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 219 +2025-10-29 10:25:49 [http-nio-8084-exec-2] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 219, size: 8236 bytes +2025-10-29 10:25:49 [http-nio-8084-exec-3] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 220 +2025-10-29 10:25:49 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 220, size: 8236 bytes +2025-10-29 10:25:49 [http-nio-8084-exec-4] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 221 +2025-10-29 10:25:49 [http-nio-8084-exec-4] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 221, size: 8236 bytes +2025-10-29 10:25:49 [http-nio-8084-exec-5] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 222 +2025-10-29 10:25:49 [http-nio-8084-exec-5] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 222, size: 8236 bytes +2025-10-29 10:25:50 [http-nio-8084-exec-6] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 223 +2025-10-29 10:25:50 [http-nio-8084-exec-6] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 223, size: 8236 bytes +2025-10-29 10:25:50 [http-nio-8084-exec-7] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 224 +2025-10-29 10:25:50 [http-nio-8084-exec-7] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 224, size: 8236 bytes +2025-10-29 10:25:50 [http-nio-8084-exec-8] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 225 +2025-10-29 10:25:50 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 225, size: 8236 bytes +2025-10-29 10:25:50 [http-nio-8084-exec-9] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 226 +2025-10-29 10:25:50 [http-nio-8084-exec-9] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 226, size: 8236 bytes +2025-10-29 10:25:51 [http-nio-8084-exec-10] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 227 +2025-10-29 10:25:51 [http-nio-8084-exec-10] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 227, size: 8236 bytes +2025-10-29 10:25:51 [http-nio-8084-exec-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 228 +2025-10-29 10:25:51 [http-nio-8084-exec-1] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 228, size: 8236 bytes +2025-10-29 10:25:51 [http-nio-8084-exec-2] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 229 +2025-10-29 10:25:51 [http-nio-8084-exec-2] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 229, size: 8236 bytes +2025-10-29 10:25:51 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:25:51 [scheduling-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 조회 완료 - meetingId: test-meeting-001, count: 19 +2025-10-29 10:25:51 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 오디오 청크 조회 완료 - meetingId: test-meeting-001, chunks: 19개 +2025-10-29 10:25:51 [scheduling-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 병합 완료 - chunks: 19, totalSize: 156484 +2025-10-29 10:25:51 [scheduling-1] WARN c.u.h.stt.service.AzureSpeechService - Azure Speech Service 비활성화 - 시뮬레이션 결과 반환 +2025-10-29 10:25:51 [scheduling-1] INFO c.u.h.stt.service.AzureSpeechService - [시뮬레이션] 음성 인식 결과: 프로젝트 일정 조정이 필요할 것 같습니다. +2025-10-29 10:25:51 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - Event Hub 이벤트 발행 완료 - meetingId: test-meeting-001, text: 프로젝트 일정 조정이 필요할 것 같습니다. +2025-10-29 10:25:51 [ForkJoinPool.commonPool-worker-1] DEBUG c.u.h.s.e.p.EventHubPublisher - Event Hub 발행 시뮬레이션: +2025-10-29 10:25:51 [ForkJoinPool.commonPool-worker-1] DEBUG c.u.h.s.e.p.EventHubPublisher - Topic: transcription-events +2025-10-29 10:25:51 [ForkJoinPool.commonPool-worker-1] DEBUG c.u.h.s.e.p.EventHubPublisher - Event Data: {"eventId":"8b2014ee-6d37-48f4-8383-2048a55a8488","eventType":"SegmentCreated","segmentId":"8db7c046-3fb0-44b2-809a-81542aad63bd","recordingId":"test-meeting-001","meetingId":"test-meeting-001","text":"프로젝트 일정 조정이 필요할 것 같습니다.","speakerId":"UNKNOWN","speakerName":"참석자","timestamp":[2025,10,29,10,25,51,950875000],"duration":5.0,"confidence":0.85,"warningFlag":false,"eventTime":[2025,10,29,10,25,51,950913000]} +2025-10-29 10:25:51 [ForkJoinPool.commonPool-worker-1] INFO c.u.h.s.e.p.EventHubPublisher - 이벤트 발행 완료 - topic: transcription-events, event: SegmentCreated +2025-10-29 10:25:51 [scheduling-1] INFO c.u.h.s.c.AudioWebSocketHandler - STT 결과 전송 완료 - meetingId: test-meeting-001, sessions: 1개, text: 프로젝트 일정 조정이 필요할 것 같습니다. +2025-10-29 10:25:51 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - WebSocket 결과 전송 완료 - meetingId: test-meeting-001, text: 프로젝트 일정 조정이 필요할 것 같습니다. +2025-10-29 10:25:51 [scheduling-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 삭제 완료 - meetingId: test-meeting-001 +2025-10-29 10:25:51 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 회의 처리 완료 - meetingId: test-meeting-001, text: 프로젝트 일정 조정이 필요할 것 같습니다. +2025-10-29 10:25:51 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:25:51 [http-nio-8084-exec-3] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 230 +2025-10-29 10:25:51 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 230, size: 8236 bytes +2025-10-29 10:25:52 [http-nio-8084-exec-4] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 231 +2025-10-29 10:25:52 [http-nio-8084-exec-4] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 231, size: 8236 bytes +2025-10-29 10:25:52 [http-nio-8084-exec-5] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 232 +2025-10-29 10:25:52 [http-nio-8084-exec-5] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 232, size: 8236 bytes +2025-10-29 10:25:52 [http-nio-8084-exec-6] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 233 +2025-10-29 10:25:52 [http-nio-8084-exec-6] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 233, size: 8236 bytes +2025-10-29 10:25:52 [http-nio-8084-exec-7] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 234 +2025-10-29 10:25:52 [http-nio-8084-exec-7] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 234, size: 8236 bytes +2025-10-29 10:25:53 [http-nio-8084-exec-8] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 235 +2025-10-29 10:25:53 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 235, size: 8236 bytes +2025-10-29 10:25:53 [http-nio-8084-exec-9] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 236 +2025-10-29 10:25:53 [http-nio-8084-exec-9] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 236, size: 8236 bytes +2025-10-29 10:25:53 [http-nio-8084-exec-10] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 237 +2025-10-29 10:25:53 [http-nio-8084-exec-10] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 237, size: 8236 bytes +2025-10-29 10:25:53 [http-nio-8084-exec-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 238 +2025-10-29 10:25:53 [http-nio-8084-exec-1] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 238, size: 8236 bytes +2025-10-29 10:25:54 [http-nio-8084-exec-2] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 239 +2025-10-29 10:25:54 [http-nio-8084-exec-2] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 239, size: 8236 bytes +2025-10-29 10:25:54 [http-nio-8084-exec-3] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 240 +2025-10-29 10:25:54 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 240, size: 8236 bytes +2025-10-29 10:25:54 [http-nio-8084-exec-4] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 241 +2025-10-29 10:25:54 [http-nio-8084-exec-4] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 241, size: 8236 bytes +2025-10-29 10:25:55 [http-nio-8084-exec-5] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 242 +2025-10-29 10:25:55 [http-nio-8084-exec-5] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 242, size: 8236 bytes +2025-10-29 10:25:55 [http-nio-8084-exec-6] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 243 +2025-10-29 10:25:55 [http-nio-8084-exec-6] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 243, size: 8236 bytes +2025-10-29 10:25:55 [http-nio-8084-exec-7] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 244 +2025-10-29 10:25:55 [http-nio-8084-exec-7] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 244, size: 8236 bytes +2025-10-29 10:25:55 [http-nio-8084-exec-8] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 245 +2025-10-29 10:25:55 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 245, size: 8236 bytes +2025-10-29 10:25:56 [http-nio-8084-exec-9] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 246 +2025-10-29 10:25:56 [http-nio-8084-exec-9] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 246, size: 8236 bytes +2025-10-29 10:25:56 [http-nio-8084-exec-10] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 247 +2025-10-29 10:25:56 [http-nio-8084-exec-10] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 247, size: 8236 bytes +2025-10-29 10:25:56 [http-nio-8084-exec-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 248 +2025-10-29 10:25:56 [http-nio-8084-exec-1] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 248, size: 8236 bytes +2025-10-29 10:25:56 [http-nio-8084-exec-2] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 249 +2025-10-29 10:25:56 [http-nio-8084-exec-2] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 249, size: 8236 bytes +2025-10-29 10:25:56 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:25:57 [scheduling-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 조회 완료 - meetingId: test-meeting-001, count: 19 +2025-10-29 10:25:57 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 오디오 청크 조회 완료 - meetingId: test-meeting-001, chunks: 19개 +2025-10-29 10:25:57 [scheduling-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 병합 완료 - chunks: 19, totalSize: 156484 +2025-10-29 10:25:57 [scheduling-1] WARN c.u.h.stt.service.AzureSpeechService - Azure Speech Service 비활성화 - 시뮬레이션 결과 반환 +2025-10-29 10:25:57 [scheduling-1] INFO c.u.h.stt.service.AzureSpeechService - [시뮬레이션] 음성 인식 결과: 프로젝트 일정 조정이 필요할 것 같습니다. +2025-10-29 10:25:57 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - Event Hub 이벤트 발행 완료 - meetingId: test-meeting-001, text: 프로젝트 일정 조정이 필요할 것 같습니다. +2025-10-29 10:25:57 [ForkJoinPool.commonPool-worker-1] DEBUG c.u.h.s.e.p.EventHubPublisher - Event Hub 발행 시뮬레이션: +2025-10-29 10:25:57 [ForkJoinPool.commonPool-worker-1] DEBUG c.u.h.s.e.p.EventHubPublisher - Topic: transcription-events +2025-10-29 10:25:57 [ForkJoinPool.commonPool-worker-1] DEBUG c.u.h.s.e.p.EventHubPublisher - Event Data: {"eventId":"1c16eb1b-83ac-4197-be74-2d252213e601","eventType":"SegmentCreated","segmentId":"948462b7-d812-40d1-ae0d-28ae0b4dbd66","recordingId":"test-meeting-001","meetingId":"test-meeting-001","text":"프로젝트 일정 조정이 필요할 것 같습니다.","speakerId":"UNKNOWN","speakerName":"참석자","timestamp":[2025,10,29,10,25,57,40870000],"duration":5.0,"confidence":0.85,"warningFlag":false,"eventTime":[2025,10,29,10,25,57,40890000]} +2025-10-29 10:25:57 [ForkJoinPool.commonPool-worker-1] INFO c.u.h.s.e.p.EventHubPublisher - 이벤트 발행 완료 - topic: transcription-events, event: SegmentCreated +2025-10-29 10:25:57 [scheduling-1] INFO c.u.h.s.c.AudioWebSocketHandler - STT 결과 전송 완료 - meetingId: test-meeting-001, sessions: 1개, text: 프로젝트 일정 조정이 필요할 것 같습니다. +2025-10-29 10:25:57 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - WebSocket 결과 전송 완료 - meetingId: test-meeting-001, text: 프로젝트 일정 조정이 필요할 것 같습니다. +2025-10-29 10:25:57 [scheduling-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 삭제 완료 - meetingId: test-meeting-001 +2025-10-29 10:25:57 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 회의 처리 완료 - meetingId: test-meeting-001, text: 프로젝트 일정 조정이 필요할 것 같습니다. +2025-10-29 10:25:57 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:25:57 [http-nio-8084-exec-3] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 250 +2025-10-29 10:25:57 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 250, size: 8236 bytes +2025-10-29 10:25:57 [http-nio-8084-exec-4] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 251 +2025-10-29 10:25:57 [http-nio-8084-exec-4] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 251, size: 8236 bytes +2025-10-29 10:25:57 [http-nio-8084-exec-5] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 252 +2025-10-29 10:25:57 [http-nio-8084-exec-5] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 252, size: 8236 bytes +2025-10-29 10:25:57 [http-nio-8084-exec-6] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 253 +2025-10-29 10:25:57 [http-nio-8084-exec-6] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 253, size: 8236 bytes +2025-10-29 10:25:58 [http-nio-8084-exec-7] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 254 +2025-10-29 10:25:58 [http-nio-8084-exec-7] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 254, size: 8236 bytes +2025-10-29 10:25:58 [http-nio-8084-exec-8] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 255 +2025-10-29 10:25:58 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 255, size: 8236 bytes +2025-10-29 10:25:58 [http-nio-8084-exec-9] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 256 +2025-10-29 10:25:58 [http-nio-8084-exec-9] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 256, size: 8236 bytes +2025-10-29 10:25:58 [http-nio-8084-exec-10] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 257 +2025-10-29 10:25:58 [http-nio-8084-exec-10] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 257, size: 8236 bytes +2025-10-29 10:25:59 [http-nio-8084-exec-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 258 +2025-10-29 10:25:59 [http-nio-8084-exec-1] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 258, size: 8236 bytes +2025-10-29 10:25:59 [http-nio-8084-exec-2] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 259 +2025-10-29 10:25:59 [http-nio-8084-exec-2] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 259, size: 8236 bytes +2025-10-29 10:25:59 [http-nio-8084-exec-3] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 260 +2025-10-29 10:25:59 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 260, size: 8236 bytes +2025-10-29 10:25:59 [http-nio-8084-exec-4] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 261 +2025-10-29 10:25:59 [http-nio-8084-exec-4] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 261, size: 8236 bytes +2025-10-29 10:26:00 [http-nio-8084-exec-5] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 262 +2025-10-29 10:26:00 [http-nio-8084-exec-5] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 262, size: 8236 bytes +2025-10-29 10:26:00 [http-nio-8084-exec-6] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 263 +2025-10-29 10:26:00 [http-nio-8084-exec-6] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 263, size: 8236 bytes +2025-10-29 10:26:00 [http-nio-8084-exec-7] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 264 +2025-10-29 10:26:00 [http-nio-8084-exec-7] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 264, size: 8236 bytes +2025-10-29 10:26:00 [http-nio-8084-exec-8] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 265 +2025-10-29 10:26:00 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 265, size: 8236 bytes +2025-10-29 10:26:01 [http-nio-8084-exec-9] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 266 +2025-10-29 10:26:01 [http-nio-8084-exec-9] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 266, size: 8236 bytes +2025-10-29 10:26:01 [http-nio-8084-exec-10] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 267 +2025-10-29 10:26:01 [http-nio-8084-exec-10] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 267, size: 8236 bytes +2025-10-29 10:26:01 [http-nio-8084-exec-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 268 +2025-10-29 10:26:01 [http-nio-8084-exec-1] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 268, size: 8236 bytes +2025-10-29 10:26:02 [http-nio-8084-exec-2] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 269 +2025-10-29 10:26:02 [http-nio-8084-exec-2] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 269, size: 8236 bytes +2025-10-29 10:26:02 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:26:02 [scheduling-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 조회 완료 - meetingId: test-meeting-001, count: 19 +2025-10-29 10:26:02 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 오디오 청크 조회 완료 - meetingId: test-meeting-001, chunks: 19개 +2025-10-29 10:26:02 [scheduling-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 병합 완료 - chunks: 19, totalSize: 156484 +2025-10-29 10:26:02 [scheduling-1] WARN c.u.h.stt.service.AzureSpeechService - Azure Speech Service 비활성화 - 시뮬레이션 결과 반환 +2025-10-29 10:26:02 [scheduling-1] INFO c.u.h.stt.service.AzureSpeechService - [시뮬레이션] 음성 인식 결과: 신제품 개발 일정에 대해 논의하고 있습니다. +2025-10-29 10:26:02 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - Event Hub 이벤트 발행 완료 - meetingId: test-meeting-001, text: 신제품 개발 일정에 대해 논의하고 있습니다. +2025-10-29 10:26:02 [ForkJoinPool.commonPool-worker-1] DEBUG c.u.h.s.e.p.EventHubPublisher - Event Hub 발행 시뮬레이션: +2025-10-29 10:26:02 [ForkJoinPool.commonPool-worker-1] DEBUG c.u.h.s.e.p.EventHubPublisher - Topic: transcription-events +2025-10-29 10:26:02 [ForkJoinPool.commonPool-worker-1] DEBUG c.u.h.s.e.p.EventHubPublisher - Event Data: {"eventId":"159da0f6-6432-4d09-be23-226679cb2c16","eventType":"SegmentCreated","segmentId":"a4dd6204-7ec8-4e67-b8a3-13fc09093028","recordingId":"test-meeting-001","meetingId":"test-meeting-001","text":"신제품 개발 일정에 대해 논의하고 있습니다.","speakerId":"UNKNOWN","speakerName":"참석자","timestamp":[2025,10,29,10,26,2,359985000],"duration":5.0,"confidence":0.85,"warningFlag":false,"eventTime":[2025,10,29,10,26,2,360014000]} +2025-10-29 10:26:02 [ForkJoinPool.commonPool-worker-1] INFO c.u.h.s.e.p.EventHubPublisher - 이벤트 발행 완료 - topic: transcription-events, event: SegmentCreated +2025-10-29 10:26:02 [scheduling-1] INFO c.u.h.s.c.AudioWebSocketHandler - STT 결과 전송 완료 - meetingId: test-meeting-001, sessions: 1개, text: 신제품 개발 일정에 대해 논의하고 있습니다. +2025-10-29 10:26:02 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - WebSocket 결과 전송 완료 - meetingId: test-meeting-001, text: 신제품 개발 일정에 대해 논의하고 있습니다. +2025-10-29 10:26:02 [scheduling-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 삭제 완료 - meetingId: test-meeting-001 +2025-10-29 10:26:02 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 회의 처리 완료 - meetingId: test-meeting-001, text: 신제품 개발 일정에 대해 논의하고 있습니다. +2025-10-29 10:26:02 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:26:02 [http-nio-8084-exec-3] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 270 +2025-10-29 10:26:02 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 270, size: 8236 bytes +2025-10-29 10:26:02 [http-nio-8084-exec-3] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 271 +2025-10-29 10:26:02 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 271, size: 8236 bytes +2025-10-29 10:26:02 [http-nio-8084-exec-4] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 272 +2025-10-29 10:26:02 [http-nio-8084-exec-4] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 272, size: 8236 bytes +2025-10-29 10:26:03 [http-nio-8084-exec-5] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 273 +2025-10-29 10:26:03 [http-nio-8084-exec-5] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 273, size: 8236 bytes +2025-10-29 10:26:03 [http-nio-8084-exec-6] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 274 +2025-10-29 10:26:03 [http-nio-8084-exec-6] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 274, size: 8236 bytes +2025-10-29 10:26:03 [http-nio-8084-exec-7] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 275 +2025-10-29 10:26:03 [http-nio-8084-exec-7] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 275, size: 8236 bytes +2025-10-29 10:26:03 [http-nio-8084-exec-8] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 276 +2025-10-29 10:26:03 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 276, size: 8236 bytes +2025-10-29 10:26:04 [http-nio-8084-exec-9] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 277 +2025-10-29 10:26:04 [http-nio-8084-exec-9] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 277, size: 8236 bytes +2025-10-29 10:26:04 [http-nio-8084-exec-10] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 278 +2025-10-29 10:26:04 [http-nio-8084-exec-10] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 278, size: 8236 bytes +2025-10-29 10:26:04 [http-nio-8084-exec-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 279 +2025-10-29 10:26:04 [http-nio-8084-exec-1] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 279, size: 8236 bytes +2025-10-29 10:26:04 [http-nio-8084-exec-2] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 280 +2025-10-29 10:26:04 [http-nio-8084-exec-2] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 280, size: 8236 bytes +2025-10-29 10:26:05 [http-nio-8084-exec-3] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 281 +2025-10-29 10:26:05 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 281, size: 8236 bytes +2025-10-29 10:26:05 [http-nio-8084-exec-4] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 282 +2025-10-29 10:26:05 [http-nio-8084-exec-4] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 282, size: 8236 bytes +2025-10-29 10:26:05 [http-nio-8084-exec-5] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 283 +2025-10-29 10:26:05 [http-nio-8084-exec-5] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 283, size: 8236 bytes +2025-10-29 10:26:05 [http-nio-8084-exec-6] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 284 +2025-10-29 10:26:05 [http-nio-8084-exec-6] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 284, size: 8236 bytes +2025-10-29 10:26:06 [http-nio-8084-exec-7] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 285 +2025-10-29 10:26:06 [http-nio-8084-exec-7] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 285, size: 8236 bytes +2025-10-29 10:26:06 [http-nio-8084-exec-8] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 286 +2025-10-29 10:26:06 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 286, size: 8236 bytes +2025-10-29 10:26:06 [http-nio-8084-exec-9] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 287 +2025-10-29 10:26:06 [http-nio-8084-exec-9] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 287, size: 8236 bytes +2025-10-29 10:26:06 [http-nio-8084-exec-10] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 288 +2025-10-29 10:26:06 [http-nio-8084-exec-10] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 288, size: 8236 bytes +2025-10-29 10:26:07 [http-nio-8084-exec-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 289 +2025-10-29 10:26:07 [http-nio-8084-exec-1] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 289, size: 8236 bytes +2025-10-29 10:26:07 [http-nio-8084-exec-2] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 290 +2025-10-29 10:26:07 [http-nio-8084-exec-2] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 290, size: 8236 bytes +2025-10-29 10:26:07 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:26:07 [scheduling-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 조회 완료 - meetingId: test-meeting-001, count: 20 +2025-10-29 10:26:07 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 오디오 청크 조회 완료 - meetingId: test-meeting-001, chunks: 20개 +2025-10-29 10:26:07 [scheduling-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 병합 완료 - chunks: 20, totalSize: 164720 +2025-10-29 10:26:07 [scheduling-1] WARN c.u.h.stt.service.AzureSpeechService - Azure Speech Service 비활성화 - 시뮬레이션 결과 반환 +2025-10-29 10:26:07 [scheduling-1] INFO c.u.h.stt.service.AzureSpeechService - [시뮬레이션] 음성 인식 결과: 프로젝트 일정 조정이 필요할 것 같습니다. +2025-10-29 10:26:07 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - Event Hub 이벤트 발행 완료 - meetingId: test-meeting-001, text: 프로젝트 일정 조정이 필요할 것 같습니다. +2025-10-29 10:26:07 [ForkJoinPool.commonPool-worker-1] DEBUG c.u.h.s.e.p.EventHubPublisher - Event Hub 발행 시뮬레이션: +2025-10-29 10:26:07 [ForkJoinPool.commonPool-worker-1] DEBUG c.u.h.s.e.p.EventHubPublisher - Topic: transcription-events +2025-10-29 10:26:07 [scheduling-1] INFO c.u.h.s.c.AudioWebSocketHandler - STT 결과 전송 완료 - meetingId: test-meeting-001, sessions: 1개, text: 프로젝트 일정 조정이 필요할 것 같습니다. +2025-10-29 10:26:07 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - WebSocket 결과 전송 완료 - meetingId: test-meeting-001, text: 프로젝트 일정 조정이 필요할 것 같습니다. +2025-10-29 10:26:07 [ForkJoinPool.commonPool-worker-1] DEBUG c.u.h.s.e.p.EventHubPublisher - Event Data: {"eventId":"bc304eb8-63d0-4dee-92a5-939bea1bd326","eventType":"SegmentCreated","segmentId":"84d22a13-0745-431b-a9ba-7e27bacd0098","recordingId":"test-meeting-001","meetingId":"test-meeting-001","text":"프로젝트 일정 조정이 필요할 것 같습니다.","speakerId":"UNKNOWN","speakerName":"참석자","timestamp":[2025,10,29,10,26,7,527943000],"duration":5.0,"confidence":0.85,"warningFlag":false,"eventTime":[2025,10,29,10,26,7,527978000]} +2025-10-29 10:26:07 [ForkJoinPool.commonPool-worker-1] INFO c.u.h.s.e.p.EventHubPublisher - 이벤트 발행 완료 - topic: transcription-events, event: SegmentCreated +2025-10-29 10:26:07 [scheduling-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 삭제 완료 - meetingId: test-meeting-001 +2025-10-29 10:26:07 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 회의 처리 완료 - meetingId: test-meeting-001, text: 프로젝트 일정 조정이 필요할 것 같습니다. +2025-10-29 10:26:07 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:26:07 [http-nio-8084-exec-3] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 291 +2025-10-29 10:26:07 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 291, size: 8236 bytes +2025-10-29 10:26:07 [http-nio-8084-exec-4] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 292 +2025-10-29 10:26:07 [http-nio-8084-exec-4] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 292, size: 8236 bytes +2025-10-29 10:26:08 [http-nio-8084-exec-5] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 293 +2025-10-29 10:26:08 [http-nio-8084-exec-5] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 293, size: 8236 bytes +2025-10-29 10:26:08 [http-nio-8084-exec-6] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 294 +2025-10-29 10:26:08 [http-nio-8084-exec-6] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 294, size: 8236 bytes +2025-10-29 10:26:08 [http-nio-8084-exec-7] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 295 +2025-10-29 10:26:08 [http-nio-8084-exec-7] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 295, size: 8236 bytes +2025-10-29 10:26:08 [http-nio-8084-exec-8] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 296 +2025-10-29 10:26:08 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 296, size: 8236 bytes +2025-10-29 10:26:09 [http-nio-8084-exec-9] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 297 +2025-10-29 10:26:09 [http-nio-8084-exec-9] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 297, size: 8236 bytes +2025-10-29 10:26:09 [http-nio-8084-exec-10] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 298 +2025-10-29 10:26:09 [http-nio-8084-exec-10] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 298, size: 8236 bytes +2025-10-29 10:26:09 [http-nio-8084-exec-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 299 +2025-10-29 10:26:09 [http-nio-8084-exec-1] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 299, size: 8236 bytes +2025-10-29 10:26:09 [http-nio-8084-exec-2] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 300 +2025-10-29 10:26:09 [http-nio-8084-exec-2] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 300, size: 8236 bytes +2025-10-29 10:26:10 [http-nio-8084-exec-3] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 301 +2025-10-29 10:26:10 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 301, size: 8236 bytes +2025-10-29 10:26:10 [http-nio-8084-exec-4] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 302 +2025-10-29 10:26:10 [http-nio-8084-exec-4] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 302, size: 8236 bytes +2025-10-29 10:26:10 [http-nio-8084-exec-5] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 303 +2025-10-29 10:26:10 [http-nio-8084-exec-5] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 303, size: 8236 bytes +2025-10-29 10:26:10 [http-nio-8084-exec-6] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 304 +2025-10-29 10:26:10 [http-nio-8084-exec-6] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 304, size: 8236 bytes +2025-10-29 10:26:11 [http-nio-8084-exec-7] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 305 +2025-10-29 10:26:11 [http-nio-8084-exec-7] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 305, size: 8236 bytes +2025-10-29 10:26:11 [http-nio-8084-exec-8] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 306 +2025-10-29 10:26:11 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 306, size: 8236 bytes +2025-10-29 10:26:11 [http-nio-8084-exec-8] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 307 +2025-10-29 10:26:11 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 307, size: 8236 bytes +2025-10-29 10:26:12 [http-nio-8084-exec-8] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 308 +2025-10-29 10:26:12 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 308, size: 8236 bytes +2025-10-29 10:26:12 [http-nio-8084-exec-8] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 309 +2025-10-29 10:26:12 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 309, size: 8236 bytes +2025-10-29 10:26:12 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:26:13 [http-nio-8084-exec-8] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 310 +2025-10-29 10:26:13 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 310, size: 8236 bytes +2025-10-29 10:26:13 [scheduling-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 조회 완료 - meetingId: test-meeting-001, count: 20 +2025-10-29 10:26:13 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 오디오 청크 조회 완료 - meetingId: test-meeting-001, chunks: 20개 +2025-10-29 10:26:13 [scheduling-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 병합 완료 - chunks: 20, totalSize: 164720 +2025-10-29 10:26:13 [scheduling-1] WARN c.u.h.stt.service.AzureSpeechService - Azure Speech Service 비활성화 - 시뮬레이션 결과 반환 +2025-10-29 10:26:13 [scheduling-1] INFO c.u.h.stt.service.AzureSpeechService - [시뮬레이션] 음성 인식 결과: 신제품 개발 일정에 대해 논의하고 있습니다. +2025-10-29 10:26:13 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - Event Hub 이벤트 발행 완료 - meetingId: test-meeting-001, text: 신제품 개발 일정에 대해 논의하고 있습니다. +2025-10-29 10:26:13 [ForkJoinPool.commonPool-worker-1] DEBUG c.u.h.s.e.p.EventHubPublisher - Event Hub 발행 시뮬레이션: +2025-10-29 10:26:13 [ForkJoinPool.commonPool-worker-1] DEBUG c.u.h.s.e.p.EventHubPublisher - Topic: transcription-events +2025-10-29 10:26:13 [ForkJoinPool.commonPool-worker-1] DEBUG c.u.h.s.e.p.EventHubPublisher - Event Data: {"eventId":"41fb41a3-4cc2-4c8a-9f2a-839360a30f4a","eventType":"SegmentCreated","segmentId":"cdecf4f5-d943-4241-91d3-98d58105b6eb","recordingId":"test-meeting-001","meetingId":"test-meeting-001","text":"신제품 개발 일정에 대해 논의하고 있습니다.","speakerId":"UNKNOWN","speakerName":"참석자","timestamp":[2025,10,29,10,26,13,632106000],"duration":5.0,"confidence":0.85,"warningFlag":false,"eventTime":[2025,10,29,10,26,13,632165000]} +2025-10-29 10:26:13 [ForkJoinPool.commonPool-worker-1] INFO c.u.h.s.e.p.EventHubPublisher - 이벤트 발행 완료 - topic: transcription-events, event: SegmentCreated +2025-10-29 10:26:13 [scheduling-1] INFO c.u.h.s.c.AudioWebSocketHandler - STT 결과 전송 완료 - meetingId: test-meeting-001, sessions: 1개, text: 신제품 개발 일정에 대해 논의하고 있습니다. +2025-10-29 10:26:13 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - WebSocket 결과 전송 완료 - meetingId: test-meeting-001, text: 신제품 개발 일정에 대해 논의하고 있습니다. +2025-10-29 10:26:13 [scheduling-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 삭제 완료 - meetingId: test-meeting-001 +2025-10-29 10:26:13 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 회의 처리 완료 - meetingId: test-meeting-001, text: 신제품 개발 일정에 대해 논의하고 있습니다. +2025-10-29 10:26:13 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:26:13 [http-nio-8084-exec-8] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 311 +2025-10-29 10:26:13 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 311, size: 8236 bytes +2025-10-29 10:26:13 [http-nio-8084-exec-8] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 312 +2025-10-29 10:26:13 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 312, size: 8236 bytes +2025-10-29 10:26:14 [http-nio-8084-exec-8] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 313 +2025-10-29 10:26:14 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 313, size: 8236 bytes +2025-10-29 10:26:14 [http-nio-8084-exec-8] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 314 +2025-10-29 10:26:14 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 314, size: 8236 bytes +2025-10-29 10:26:15 [http-nio-8084-exec-8] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 315 +2025-10-29 10:26:15 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 315, size: 8236 bytes +2025-10-29 10:26:15 [http-nio-8084-exec-8] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 316 +2025-10-29 10:26:15 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 316, size: 8236 bytes +2025-10-29 10:26:15 [http-nio-8084-exec-8] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 317 +2025-10-29 10:26:15 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 317, size: 8236 bytes +2025-10-29 10:26:16 [http-nio-8084-exec-8] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 318 +2025-10-29 10:26:16 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 318, size: 8236 bytes +2025-10-29 10:26:16 [http-nio-8084-exec-8] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 319 +2025-10-29 10:26:16 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 319, size: 8236 bytes +2025-10-29 10:26:16 [http-nio-8084-exec-8] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 320 +2025-10-29 10:26:16 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 320, size: 8236 bytes +2025-10-29 10:26:16 [http-nio-8084-exec-8] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 321 +2025-10-29 10:26:16 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 321, size: 8236 bytes +2025-10-29 10:26:16 [http-nio-8084-exec-8] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 322 +2025-10-29 10:26:16 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 322, size: 8236 bytes +2025-10-29 10:26:16 [http-nio-8084-exec-8] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 323 +2025-10-29 10:26:16 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 323, size: 8236 bytes +2025-10-29 10:26:16 [http-nio-8084-exec-8] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 324 +2025-10-29 10:26:16 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 324, size: 8236 bytes +2025-10-29 10:26:16 [http-nio-8084-exec-8] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 325 +2025-10-29 10:26:16 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 325, size: 8236 bytes +2025-10-29 10:26:16 [http-nio-8084-exec-8] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 326 +2025-10-29 10:26:16 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 326, size: 8236 bytes +2025-10-29 10:26:16 [http-nio-8084-exec-8] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 327 +2025-10-29 10:26:16 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 327, size: 8236 bytes +2025-10-29 10:26:17 [http-nio-8084-exec-9] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 328 +2025-10-29 10:26:17 [http-nio-8084-exec-9] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 328, size: 8236 bytes +2025-10-29 10:26:17 [http-nio-8084-exec-10] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 329 +2025-10-29 10:26:17 [http-nio-8084-exec-10] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 329, size: 8236 bytes +2025-10-29 10:26:17 [http-nio-8084-exec-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 330 +2025-10-29 10:26:17 [http-nio-8084-exec-1] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 330, size: 8236 bytes +2025-10-29 10:26:17 [http-nio-8084-exec-2] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 331 +2025-10-29 10:26:17 [http-nio-8084-exec-2] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 331, size: 8236 bytes +2025-10-29 10:26:18 [http-nio-8084-exec-3] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 332 +2025-10-29 10:26:18 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 332, size: 8236 bytes +2025-10-29 10:26:18 [http-nio-8084-exec-4] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 333 +2025-10-29 10:26:18 [http-nio-8084-exec-4] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 333, size: 8236 bytes +2025-10-29 10:26:18 [http-nio-8084-exec-5] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 334 +2025-10-29 10:26:18 [http-nio-8084-exec-5] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 334, size: 8236 bytes +2025-10-29 10:26:18 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:26:18 [scheduling-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 조회 완료 - meetingId: test-meeting-001, count: 23 +2025-10-29 10:26:18 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 오디오 청크 조회 완료 - meetingId: test-meeting-001, chunks: 23개 +2025-10-29 10:26:18 [scheduling-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 병합 완료 - chunks: 23, totalSize: 189428 +2025-10-29 10:26:18 [scheduling-1] WARN c.u.h.stt.service.AzureSpeechService - Azure Speech Service 비활성화 - 시뮬레이션 결과 반환 +2025-10-29 10:26:18 [scheduling-1] INFO c.u.h.stt.service.AzureSpeechService - [시뮬레이션] 음성 인식 결과: 고객 피드백을 반영한 개선안을 검토 중입니다. +2025-10-29 10:26:18 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - Event Hub 이벤트 발행 완료 - meetingId: test-meeting-001, text: 고객 피드백을 반영한 개선안을 검토 중입니다. +2025-10-29 10:26:18 [ForkJoinPool.commonPool-worker-1] DEBUG c.u.h.s.e.p.EventHubPublisher - Event Hub 발행 시뮬레이션: +2025-10-29 10:26:18 [ForkJoinPool.commonPool-worker-1] DEBUG c.u.h.s.e.p.EventHubPublisher - Topic: transcription-events +2025-10-29 10:26:18 [ForkJoinPool.commonPool-worker-1] DEBUG c.u.h.s.e.p.EventHubPublisher - Event Data: {"eventId":"ee511a99-9274-4575-9bc4-b9aa307eb5a0","eventType":"SegmentCreated","segmentId":"0f809029-09a9-49b1-87b7-3780d6a586f0","recordingId":"test-meeting-001","meetingId":"test-meeting-001","text":"고객 피드백을 반영한 개선안을 검토 중입니다.","speakerId":"UNKNOWN","speakerName":"참석자","timestamp":[2025,10,29,10,26,18,815857000],"duration":5.0,"confidence":0.85,"warningFlag":false,"eventTime":[2025,10,29,10,26,18,815895000]} +2025-10-29 10:26:18 [ForkJoinPool.commonPool-worker-1] INFO c.u.h.s.e.p.EventHubPublisher - 이벤트 발행 완료 - topic: transcription-events, event: SegmentCreated +2025-10-29 10:26:18 [scheduling-1] INFO c.u.h.s.c.AudioWebSocketHandler - STT 결과 전송 완료 - meetingId: test-meeting-001, sessions: 1개, text: 고객 피드백을 반영한 개선안을 검토 중입니다. +2025-10-29 10:26:18 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - WebSocket 결과 전송 완료 - meetingId: test-meeting-001, text: 고객 피드백을 반영한 개선안을 검토 중입니다. +2025-10-29 10:26:18 [scheduling-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 삭제 완료 - meetingId: test-meeting-001 +2025-10-29 10:26:18 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 회의 처리 완료 - meetingId: test-meeting-001, text: 고객 피드백을 반영한 개선안을 검토 중입니다. +2025-10-29 10:26:18 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:26:18 [http-nio-8084-exec-6] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 335 +2025-10-29 10:26:18 [http-nio-8084-exec-6] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 335, size: 8236 bytes +2025-10-29 10:26:19 [http-nio-8084-exec-7] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 336 +2025-10-29 10:26:19 [http-nio-8084-exec-7] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 336, size: 8236 bytes +2025-10-29 10:26:19 [http-nio-8084-exec-8] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 337 +2025-10-29 10:26:19 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 337, size: 8236 bytes +2025-10-29 10:26:19 [http-nio-8084-exec-9] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 338 +2025-10-29 10:26:19 [http-nio-8084-exec-9] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 338, size: 8236 bytes +2025-10-29 10:26:19 [http-nio-8084-exec-10] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 339 +2025-10-29 10:26:19 [http-nio-8084-exec-10] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 339, size: 8236 bytes +2025-10-29 10:26:20 [http-nio-8084-exec-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 340 +2025-10-29 10:26:20 [http-nio-8084-exec-1] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 340, size: 8236 bytes +2025-10-29 10:26:20 [http-nio-8084-exec-2] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 341 +2025-10-29 10:26:20 [http-nio-8084-exec-2] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 341, size: 8236 bytes +2025-10-29 10:26:20 [http-nio-8084-exec-3] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 342 +2025-10-29 10:26:20 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 342, size: 8236 bytes +2025-10-29 10:26:20 [http-nio-8084-exec-4] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 343 +2025-10-29 10:26:20 [http-nio-8084-exec-4] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 343, size: 8236 bytes +2025-10-29 10:26:21 [http-nio-8084-exec-5] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 344 +2025-10-29 10:26:21 [http-nio-8084-exec-5] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 344, size: 8236 bytes +2025-10-29 10:26:21 [http-nio-8084-exec-6] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 345 +2025-10-29 10:26:21 [http-nio-8084-exec-6] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 345, size: 8236 bytes +2025-10-29 10:26:21 [http-nio-8084-exec-7] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 346 +2025-10-29 10:26:21 [http-nio-8084-exec-7] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 346, size: 8236 bytes +2025-10-29 10:26:21 [http-nio-8084-exec-8] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 347 +2025-10-29 10:26:21 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 347, size: 8236 bytes +2025-10-29 10:26:22 [http-nio-8084-exec-9] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 348 +2025-10-29 10:26:22 [http-nio-8084-exec-9] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 348, size: 8236 bytes +2025-10-29 10:26:22 [http-nio-8084-exec-10] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 349 +2025-10-29 10:26:22 [http-nio-8084-exec-10] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 349, size: 8236 bytes +2025-10-29 10:26:22 [http-nio-8084-exec-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 350 +2025-10-29 10:26:22 [http-nio-8084-exec-1] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 350, size: 8236 bytes +2025-10-29 10:26:22 [http-nio-8084-exec-2] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 351 +2025-10-29 10:26:22 [http-nio-8084-exec-2] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 351, size: 8236 bytes +2025-10-29 10:26:23 [http-nio-8084-exec-3] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 352 +2025-10-29 10:26:23 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 352, size: 8236 bytes +2025-10-29 10:26:23 [http-nio-8084-exec-4] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 353 +2025-10-29 10:26:23 [http-nio-8084-exec-4] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 353, size: 8236 bytes +2025-10-29 10:26:23 [http-nio-8084-exec-5] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 354 +2025-10-29 10:26:23 [http-nio-8084-exec-5] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 354, size: 8236 bytes +2025-10-29 10:26:23 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:26:23 [scheduling-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 조회 완료 - meetingId: test-meeting-001, count: 19 +2025-10-29 10:26:23 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 오디오 청크 조회 완료 - meetingId: test-meeting-001, chunks: 19개 +2025-10-29 10:26:23 [scheduling-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 병합 완료 - chunks: 19, totalSize: 156484 +2025-10-29 10:26:23 [scheduling-1] WARN c.u.h.stt.service.AzureSpeechService - Azure Speech Service 비활성화 - 시뮬레이션 결과 반환 +2025-10-29 10:26:23 [scheduling-1] INFO c.u.h.stt.service.AzureSpeechService - [시뮬레이션] 음성 인식 결과: 다음 주까지 프로토타입을 완성하기로 했습니다. +2025-10-29 10:26:23 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - Event Hub 이벤트 발행 완료 - meetingId: test-meeting-001, text: 다음 주까지 프로토타입을 완성하기로 했습니다. +2025-10-29 10:26:23 [ForkJoinPool.commonPool-worker-1] DEBUG c.u.h.s.e.p.EventHubPublisher - Event Hub 발행 시뮬레이션: +2025-10-29 10:26:23 [ForkJoinPool.commonPool-worker-1] DEBUG c.u.h.s.e.p.EventHubPublisher - Topic: transcription-events +2025-10-29 10:26:23 [ForkJoinPool.commonPool-worker-1] DEBUG c.u.h.s.e.p.EventHubPublisher - Event Data: {"eventId":"c6bcbee5-6b6e-4325-836a-458f43cfb00a","eventType":"SegmentCreated","segmentId":"80309a66-6c93-47bf-b339-f2870c81ad32","recordingId":"test-meeting-001","meetingId":"test-meeting-001","text":"다음 주까지 프로토타입을 완성하기로 했습니다.","speakerId":"UNKNOWN","speakerName":"참석자","timestamp":[2025,10,29,10,26,23,986615000],"duration":5.0,"confidence":0.85,"warningFlag":false,"eventTime":[2025,10,29,10,26,23,986633000]} +2025-10-29 10:26:23 [ForkJoinPool.commonPool-worker-1] INFO c.u.h.s.e.p.EventHubPublisher - 이벤트 발행 완료 - topic: transcription-events, event: SegmentCreated +2025-10-29 10:26:23 [scheduling-1] INFO c.u.h.s.c.AudioWebSocketHandler - STT 결과 전송 완료 - meetingId: test-meeting-001, sessions: 1개, text: 다음 주까지 프로토타입을 완성하기로 했습니다. +2025-10-29 10:26:23 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - WebSocket 결과 전송 완료 - meetingId: test-meeting-001, text: 다음 주까지 프로토타입을 완성하기로 했습니다. +2025-10-29 10:26:23 [scheduling-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 삭제 완료 - meetingId: test-meeting-001 +2025-10-29 10:26:23 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 회의 처리 완료 - meetingId: test-meeting-001, text: 다음 주까지 프로토타입을 완성하기로 했습니다. +2025-10-29 10:26:23 [http-nio-8084-exec-6] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 355 +2025-10-29 10:26:23 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:26:23 [http-nio-8084-exec-6] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 355, size: 8236 bytes +2025-10-29 10:26:24 [http-nio-8084-exec-7] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 356 +2025-10-29 10:26:24 [http-nio-8084-exec-7] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 356, size: 8236 bytes +2025-10-29 10:26:24 [http-nio-8084-exec-8] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 357 +2025-10-29 10:26:24 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 357, size: 8236 bytes +2025-10-29 10:26:24 [http-nio-8084-exec-9] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 358 +2025-10-29 10:26:24 [http-nio-8084-exec-9] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 358, size: 8236 bytes +2025-10-29 10:26:24 [http-nio-8084-exec-10] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 359 +2025-10-29 10:26:24 [http-nio-8084-exec-10] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 359, size: 8236 bytes +2025-10-29 10:26:25 [http-nio-8084-exec-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 360 +2025-10-29 10:26:25 [http-nio-8084-exec-1] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 360, size: 8236 bytes +2025-10-29 10:26:25 [http-nio-8084-exec-2] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 361 +2025-10-29 10:26:25 [http-nio-8084-exec-2] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 361, size: 8236 bytes +2025-10-29 10:26:25 [http-nio-8084-exec-3] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 362 +2025-10-29 10:26:25 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 362, size: 8236 bytes +2025-10-29 10:26:25 [http-nio-8084-exec-4] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 363 +2025-10-29 10:26:25 [http-nio-8084-exec-4] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 363, size: 8236 bytes +2025-10-29 10:26:26 [http-nio-8084-exec-5] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 364 +2025-10-29 10:26:26 [http-nio-8084-exec-5] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 364, size: 8236 bytes +2025-10-29 10:26:26 [http-nio-8084-exec-6] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 365 +2025-10-29 10:26:26 [http-nio-8084-exec-6] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 365, size: 8236 bytes +2025-10-29 10:26:26 [http-nio-8084-exec-7] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 366 +2025-10-29 10:26:26 [http-nio-8084-exec-7] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 366, size: 8236 bytes +2025-10-29 10:26:27 [http-nio-8084-exec-8] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 367 +2025-10-29 10:26:27 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 367, size: 8236 bytes +2025-10-29 10:26:27 [http-nio-8084-exec-9] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 368 +2025-10-29 10:26:27 [http-nio-8084-exec-9] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 368, size: 8236 bytes +2025-10-29 10:26:27 [http-nio-8084-exec-10] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 369 +2025-10-29 10:26:27 [http-nio-8084-exec-10] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 369, size: 8236 bytes +2025-10-29 10:26:27 [http-nio-8084-exec-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 370 +2025-10-29 10:26:27 [http-nio-8084-exec-1] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 370, size: 8236 bytes +2025-10-29 10:26:28 [http-nio-8084-exec-2] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 371 +2025-10-29 10:26:28 [http-nio-8084-exec-2] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 371, size: 8236 bytes +2025-10-29 10:26:28 [http-nio-8084-exec-3] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 372 +2025-10-29 10:26:28 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 372, size: 8236 bytes +2025-10-29 10:26:28 [http-nio-8084-exec-4] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 373 +2025-10-29 10:26:28 [http-nio-8084-exec-4] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 373, size: 8236 bytes +2025-10-29 10:26:28 [http-nio-8084-exec-5] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 374 +2025-10-29 10:26:28 [http-nio-8084-exec-5] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 374, size: 8236 bytes +2025-10-29 10:26:29 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:26:29 [scheduling-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 조회 완료 - meetingId: test-meeting-001, count: 19 +2025-10-29 10:26:29 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 오디오 청크 조회 완료 - meetingId: test-meeting-001, chunks: 19개 +2025-10-29 10:26:29 [scheduling-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 병합 완료 - chunks: 19, totalSize: 156484 +2025-10-29 10:26:29 [scheduling-1] WARN c.u.h.stt.service.AzureSpeechService - Azure Speech Service 비활성화 - 시뮬레이션 결과 반환 +2025-10-29 10:26:29 [scheduling-1] INFO c.u.h.stt.service.AzureSpeechService - [시뮬레이션] 음성 인식 결과: 기술 스택 선정에 대한 의견을 나누고 있습니다. +2025-10-29 10:26:29 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - Event Hub 이벤트 발행 완료 - meetingId: test-meeting-001, text: 기술 스택 선정에 대한 의견을 나누고 있습니다. +2025-10-29 10:26:29 [ForkJoinPool.commonPool-worker-1] DEBUG c.u.h.s.e.p.EventHubPublisher - Event Hub 발행 시뮬레이션: +2025-10-29 10:26:29 [ForkJoinPool.commonPool-worker-1] DEBUG c.u.h.s.e.p.EventHubPublisher - Topic: transcription-events +2025-10-29 10:26:29 [ForkJoinPool.commonPool-worker-1] DEBUG c.u.h.s.e.p.EventHubPublisher - Event Data: {"eventId":"162fd004-8749-43b5-8403-7cde270e4b0b","eventType":"SegmentCreated","segmentId":"04e80f73-87b0-48b6-a6f4-3e61e1b1a9bd","recordingId":"test-meeting-001","meetingId":"test-meeting-001","text":"기술 스택 선정에 대한 의견을 나누고 있습니다.","speakerId":"UNKNOWN","speakerName":"참석자","timestamp":[2025,10,29,10,26,29,95521000],"duration":5.0,"confidence":0.85,"warningFlag":false,"eventTime":[2025,10,29,10,26,29,95552000]} +2025-10-29 10:26:29 [ForkJoinPool.commonPool-worker-1] INFO c.u.h.s.e.p.EventHubPublisher - 이벤트 발행 완료 - topic: transcription-events, event: SegmentCreated +2025-10-29 10:26:29 [scheduling-1] INFO c.u.h.s.c.AudioWebSocketHandler - STT 결과 전송 완료 - meetingId: test-meeting-001, sessions: 1개, text: 기술 스택 선정에 대한 의견을 나누고 있습니다. +2025-10-29 10:26:29 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - WebSocket 결과 전송 완료 - meetingId: test-meeting-001, text: 기술 스택 선정에 대한 의견을 나누고 있습니다. +2025-10-29 10:26:29 [scheduling-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 삭제 완료 - meetingId: test-meeting-001 +2025-10-29 10:26:29 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 회의 처리 완료 - meetingId: test-meeting-001, text: 기술 스택 선정에 대한 의견을 나누고 있습니다. +2025-10-29 10:26:29 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:26:29 [http-nio-8084-exec-6] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 375 +2025-10-29 10:26:29 [http-nio-8084-exec-6] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 375, size: 8236 bytes +2025-10-29 10:26:29 [http-nio-8084-exec-7] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 376 +2025-10-29 10:26:29 [http-nio-8084-exec-7] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 376, size: 8236 bytes +2025-10-29 10:26:29 [http-nio-8084-exec-8] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 377 +2025-10-29 10:26:29 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 377, size: 8236 bytes +2025-10-29 10:26:29 [http-nio-8084-exec-9] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 378 +2025-10-29 10:26:29 [http-nio-8084-exec-9] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 378, size: 8236 bytes +2025-10-29 10:26:30 [http-nio-8084-exec-10] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 379 +2025-10-29 10:26:30 [http-nio-8084-exec-10] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 379, size: 8236 bytes +2025-10-29 10:26:30 [http-nio-8084-exec-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 380 +2025-10-29 10:26:30 [http-nio-8084-exec-1] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 380, size: 8236 bytes +2025-10-29 10:26:30 [http-nio-8084-exec-2] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 381 +2025-10-29 10:26:30 [http-nio-8084-exec-2] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 381, size: 8236 bytes +2025-10-29 10:26:30 [http-nio-8084-exec-3] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 382 +2025-10-29 10:26:30 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 382, size: 8236 bytes +2025-10-29 10:26:31 [http-nio-8084-exec-4] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 383 +2025-10-29 10:26:31 [http-nio-8084-exec-4] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 383, size: 8236 bytes +2025-10-29 10:26:31 [http-nio-8084-exec-5] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 384 +2025-10-29 10:26:31 [http-nio-8084-exec-5] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 384, size: 8236 bytes +2025-10-29 10:26:31 [http-nio-8084-exec-6] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 385 +2025-10-29 10:26:31 [http-nio-8084-exec-6] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 385, size: 8236 bytes +2025-10-29 10:26:31 [http-nio-8084-exec-7] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 386 +2025-10-29 10:26:31 [http-nio-8084-exec-7] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 386, size: 8236 bytes +2025-10-29 10:26:32 [http-nio-8084-exec-8] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 387 +2025-10-29 10:26:32 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 387, size: 8236 bytes +2025-10-29 10:26:32 [http-nio-8084-exec-9] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 388 +2025-10-29 10:26:32 [http-nio-8084-exec-9] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 388, size: 8236 bytes +2025-10-29 10:26:32 [http-nio-8084-exec-10] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 389 +2025-10-29 10:26:32 [http-nio-8084-exec-10] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 389, size: 8236 bytes +2025-10-29 10:26:32 [http-nio-8084-exec-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 390 +2025-10-29 10:26:32 [http-nio-8084-exec-1] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 390, size: 8236 bytes +2025-10-29 10:26:33 [http-nio-8084-exec-2] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 391 +2025-10-29 10:26:33 [http-nio-8084-exec-2] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 391, size: 8236 bytes +2025-10-29 10:26:33 [http-nio-8084-exec-3] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 392 +2025-10-29 10:26:33 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 392, size: 8236 bytes +2025-10-29 10:26:33 [http-nio-8084-exec-4] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 393 +2025-10-29 10:26:33 [http-nio-8084-exec-4] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 393, size: 8236 bytes +2025-10-29 10:26:33 [http-nio-8084-exec-5] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 394 +2025-10-29 10:26:33 [http-nio-8084-exec-5] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 394, size: 8236 bytes +2025-10-29 10:26:34 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:26:34 [scheduling-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 조회 완료 - meetingId: test-meeting-001, count: 19 +2025-10-29 10:26:34 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 오디오 청크 조회 완료 - meetingId: test-meeting-001, chunks: 19개 +2025-10-29 10:26:34 [scheduling-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 병합 완료 - chunks: 19, totalSize: 156484 +2025-10-29 10:26:34 [scheduling-1] WARN c.u.h.stt.service.AzureSpeechService - Azure Speech Service 비활성화 - 시뮬레이션 결과 반환 +2025-10-29 10:26:34 [scheduling-1] INFO c.u.h.stt.service.AzureSpeechService - [시뮬레이션] 음성 인식 결과: 마케팅 예산 배분 계획을 수립해야 합니다. +2025-10-29 10:26:34 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - Event Hub 이벤트 발행 완료 - meetingId: test-meeting-001, text: 마케팅 예산 배분 계획을 수립해야 합니다. +2025-10-29 10:26:34 [ForkJoinPool.commonPool-worker-1] DEBUG c.u.h.s.e.p.EventHubPublisher - Event Hub 발행 시뮬레이션: +2025-10-29 10:26:34 [ForkJoinPool.commonPool-worker-1] DEBUG c.u.h.s.e.p.EventHubPublisher - Topic: transcription-events +2025-10-29 10:26:34 [ForkJoinPool.commonPool-worker-1] DEBUG c.u.h.s.e.p.EventHubPublisher - Event Data: {"eventId":"7d31101d-bb77-4d7e-94bf-eec838dff5c8","eventType":"SegmentCreated","segmentId":"0d9ae8c5-a1bc-42b9-8306-094d42391e6a","recordingId":"test-meeting-001","meetingId":"test-meeting-001","text":"마케팅 예산 배분 계획을 수립해야 합니다.","speakerId":"UNKNOWN","speakerName":"참석자","timestamp":[2025,10,29,10,26,34,218356000],"duration":5.0,"confidence":0.85,"warningFlag":false,"eventTime":[2025,10,29,10,26,34,218395000]} +2025-10-29 10:26:34 [ForkJoinPool.commonPool-worker-1] INFO c.u.h.s.e.p.EventHubPublisher - 이벤트 발행 완료 - topic: transcription-events, event: SegmentCreated +2025-10-29 10:26:34 [scheduling-1] INFO c.u.h.s.c.AudioWebSocketHandler - STT 결과 전송 완료 - meetingId: test-meeting-001, sessions: 1개, text: 마케팅 예산 배분 계획을 수립해야 합니다. +2025-10-29 10:26:34 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - WebSocket 결과 전송 완료 - meetingId: test-meeting-001, text: 마케팅 예산 배분 계획을 수립해야 합니다. +2025-10-29 10:26:34 [scheduling-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 삭제 완료 - meetingId: test-meeting-001 +2025-10-29 10:26:34 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 회의 처리 완료 - meetingId: test-meeting-001, text: 마케팅 예산 배분 계획을 수립해야 합니다. +2025-10-29 10:26:34 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:26:34 [http-nio-8084-exec-6] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 395 +2025-10-29 10:26:34 [http-nio-8084-exec-6] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 395, size: 8236 bytes +2025-10-29 10:26:34 [http-nio-8084-exec-7] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 396 +2025-10-29 10:26:34 [http-nio-8084-exec-7] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 396, size: 8236 bytes +2025-10-29 10:26:34 [http-nio-8084-exec-8] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 397 +2025-10-29 10:26:34 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 397, size: 8236 bytes +2025-10-29 10:26:34 [http-nio-8084-exec-9] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 398 +2025-10-29 10:26:34 [http-nio-8084-exec-9] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 398, size: 8236 bytes +2025-10-29 10:26:35 [http-nio-8084-exec-10] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 399 +2025-10-29 10:26:35 [http-nio-8084-exec-10] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 399, size: 8236 bytes +2025-10-29 10:26:35 [http-nio-8084-exec-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 400 +2025-10-29 10:26:35 [http-nio-8084-exec-1] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 400, size: 8236 bytes +2025-10-29 10:26:35 [http-nio-8084-exec-2] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 401 +2025-10-29 10:26:35 [http-nio-8084-exec-2] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 401, size: 8236 bytes +2025-10-29 10:26:35 [http-nio-8084-exec-3] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 402 +2025-10-29 10:26:35 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 402, size: 8236 bytes +2025-10-29 10:26:36 [http-nio-8084-exec-4] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 403 +2025-10-29 10:26:36 [http-nio-8084-exec-4] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 403, size: 8236 bytes +2025-10-29 10:26:36 [http-nio-8084-exec-5] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 404 +2025-10-29 10:26:36 [http-nio-8084-exec-5] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 404, size: 8236 bytes +2025-10-29 10:26:36 [http-nio-8084-exec-6] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 405 +2025-10-29 10:26:36 [http-nio-8084-exec-6] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 405, size: 8236 bytes +2025-10-29 10:26:37 [http-nio-8084-exec-7] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 406 +2025-10-29 10:26:37 [http-nio-8084-exec-7] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 406, size: 8236 bytes +2025-10-29 10:26:37 [http-nio-8084-exec-8] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 407 +2025-10-29 10:26:37 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 407, size: 8236 bytes +2025-10-29 10:26:37 [http-nio-8084-exec-9] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 408 +2025-10-29 10:26:37 [http-nio-8084-exec-9] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 408, size: 8236 bytes +2025-10-29 10:26:37 [http-nio-8084-exec-10] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 409 +2025-10-29 10:26:37 [http-nio-8084-exec-10] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 409, size: 8236 bytes +2025-10-29 10:26:38 [http-nio-8084-exec-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 410 +2025-10-29 10:26:38 [http-nio-8084-exec-1] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 410, size: 8236 bytes +2025-10-29 10:26:38 [http-nio-8084-exec-2] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 411 +2025-10-29 10:26:38 [http-nio-8084-exec-2] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 411, size: 8236 bytes +2025-10-29 10:26:38 [http-nio-8084-exec-3] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 412 +2025-10-29 10:26:38 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 412, size: 8236 bytes +2025-10-29 10:26:38 [http-nio-8084-exec-4] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 413 +2025-10-29 10:26:38 [http-nio-8084-exec-4] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 413, size: 8236 bytes +2025-10-29 10:26:39 [http-nio-8084-exec-5] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 414 +2025-10-29 10:26:39 [http-nio-8084-exec-5] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 414, size: 8236 bytes +2025-10-29 10:26:39 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:26:39 [scheduling-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 조회 완료 - meetingId: test-meeting-001, count: 19 +2025-10-29 10:26:39 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 오디오 청크 조회 완료 - meetingId: test-meeting-001, chunks: 19개 +2025-10-29 10:26:39 [scheduling-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 병합 완료 - chunks: 19, totalSize: 156484 +2025-10-29 10:26:39 [scheduling-1] WARN c.u.h.stt.service.AzureSpeechService - Azure Speech Service 비활성화 - 시뮬레이션 결과 반환 +2025-10-29 10:26:39 [scheduling-1] INFO c.u.h.stt.service.AzureSpeechService - [시뮬레이션] 음성 인식 결과: 기술 스택 선정에 대한 의견을 나누고 있습니다. +2025-10-29 10:26:39 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - Event Hub 이벤트 발행 완료 - meetingId: test-meeting-001, text: 기술 스택 선정에 대한 의견을 나누고 있습니다. +2025-10-29 10:26:39 [ForkJoinPool.commonPool-worker-1] DEBUG c.u.h.s.e.p.EventHubPublisher - Event Hub 발행 시뮬레이션: +2025-10-29 10:26:39 [ForkJoinPool.commonPool-worker-1] DEBUG c.u.h.s.e.p.EventHubPublisher - Topic: transcription-events +2025-10-29 10:26:39 [ForkJoinPool.commonPool-worker-1] DEBUG c.u.h.s.e.p.EventHubPublisher - Event Data: {"eventId":"bd1d12bd-d939-4dbb-ba8b-5861e9005af6","eventType":"SegmentCreated","segmentId":"e55a6881-0c33-49f6-a697-dd126731a007","recordingId":"test-meeting-001","meetingId":"test-meeting-001","text":"기술 스택 선정에 대한 의견을 나누고 있습니다.","speakerId":"UNKNOWN","speakerName":"참석자","timestamp":[2025,10,29,10,26,39,356423000],"duration":5.0,"confidence":0.85,"warningFlag":false,"eventTime":[2025,10,29,10,26,39,356479000]} +2025-10-29 10:26:39 [ForkJoinPool.commonPool-worker-1] INFO c.u.h.s.e.p.EventHubPublisher - 이벤트 발행 완료 - topic: transcription-events, event: SegmentCreated +2025-10-29 10:26:39 [scheduling-1] INFO c.u.h.s.c.AudioWebSocketHandler - STT 결과 전송 완료 - meetingId: test-meeting-001, sessions: 1개, text: 기술 스택 선정에 대한 의견을 나누고 있습니다. +2025-10-29 10:26:39 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - WebSocket 결과 전송 완료 - meetingId: test-meeting-001, text: 기술 스택 선정에 대한 의견을 나누고 있습니다. +2025-10-29 10:26:39 [scheduling-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 삭제 완료 - meetingId: test-meeting-001 +2025-10-29 10:26:39 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 회의 처리 완료 - meetingId: test-meeting-001, text: 기술 스택 선정에 대한 의견을 나누고 있습니다. +2025-10-29 10:26:39 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:26:39 [http-nio-8084-exec-6] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 415 +2025-10-29 10:26:39 [http-nio-8084-exec-6] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 415, size: 8236 bytes +2025-10-29 10:26:39 [http-nio-8084-exec-7] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 416 +2025-10-29 10:26:39 [http-nio-8084-exec-7] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 416, size: 8236 bytes +2025-10-29 10:26:39 [http-nio-8084-exec-8] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 417 +2025-10-29 10:26:39 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 417, size: 8236 bytes +2025-10-29 10:26:40 [http-nio-8084-exec-9] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 418 +2025-10-29 10:26:40 [http-nio-8084-exec-9] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 418, size: 8236 bytes +2025-10-29 10:26:40 [http-nio-8084-exec-10] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 419 +2025-10-29 10:26:40 [http-nio-8084-exec-10] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 419, size: 8236 bytes +2025-10-29 10:26:40 [http-nio-8084-exec-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 420 +2025-10-29 10:26:40 [http-nio-8084-exec-1] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 420, size: 8236 bytes +2025-10-29 10:26:40 [http-nio-8084-exec-2] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 421 +2025-10-29 10:26:40 [http-nio-8084-exec-2] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 421, size: 8236 bytes +2025-10-29 10:26:41 [http-nio-8084-exec-3] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 422 +2025-10-29 10:26:41 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 422, size: 8236 bytes +2025-10-29 10:26:41 [http-nio-8084-exec-4] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 423 +2025-10-29 10:26:41 [http-nio-8084-exec-4] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 423, size: 8236 bytes +2025-10-29 10:26:41 [http-nio-8084-exec-5] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 424 +2025-10-29 10:26:41 [http-nio-8084-exec-5] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 424, size: 8236 bytes +2025-10-29 10:26:41 [http-nio-8084-exec-6] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 425 +2025-10-29 10:26:41 [http-nio-8084-exec-6] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 425, size: 8236 bytes +2025-10-29 10:26:42 [http-nio-8084-exec-7] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 426 +2025-10-29 10:26:42 [http-nio-8084-exec-7] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 426, size: 8236 bytes +2025-10-29 10:26:42 [http-nio-8084-exec-8] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 427 +2025-10-29 10:26:42 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 427, size: 8236 bytes +2025-10-29 10:26:42 [http-nio-8084-exec-9] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 428 +2025-10-29 10:26:42 [http-nio-8084-exec-9] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 428, size: 8236 bytes +2025-10-29 10:26:42 [http-nio-8084-exec-10] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 429 +2025-10-29 10:26:42 [http-nio-8084-exec-10] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 429, size: 8236 bytes +2025-10-29 10:26:43 [http-nio-8084-exec-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 430 +2025-10-29 10:26:43 [http-nio-8084-exec-1] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 430, size: 8236 bytes +2025-10-29 10:26:43 [http-nio-8084-exec-2] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 431 +2025-10-29 10:26:43 [http-nio-8084-exec-2] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 431, size: 8236 bytes +2025-10-29 10:26:43 [http-nio-8084-exec-3] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 432 +2025-10-29 10:26:43 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 432, size: 8236 bytes +2025-10-29 10:26:43 [http-nio-8084-exec-4] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 433 +2025-10-29 10:26:43 [http-nio-8084-exec-4] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 433, size: 8236 bytes +2025-10-29 10:26:44 [http-nio-8084-exec-5] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 434 +2025-10-29 10:26:44 [http-nio-8084-exec-5] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 434, size: 8236 bytes +2025-10-29 10:26:44 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:26:44 [scheduling-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 조회 완료 - meetingId: test-meeting-001, count: 19 +2025-10-29 10:26:44 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 오디오 청크 조회 완료 - meetingId: test-meeting-001, chunks: 19개 +2025-10-29 10:26:44 [scheduling-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 병합 완료 - chunks: 19, totalSize: 156484 +2025-10-29 10:26:44 [scheduling-1] WARN c.u.h.stt.service.AzureSpeechService - Azure Speech Service 비활성화 - 시뮬레이션 결과 반환 +2025-10-29 10:26:44 [scheduling-1] INFO c.u.h.stt.service.AzureSpeechService - [시뮬레이션] 음성 인식 결과: 마케팅 예산 배분 계획을 수립해야 합니다. +2025-10-29 10:26:44 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - Event Hub 이벤트 발행 완료 - meetingId: test-meeting-001, text: 마케팅 예산 배분 계획을 수립해야 합니다. +2025-10-29 10:26:44 [ForkJoinPool.commonPool-worker-1] DEBUG c.u.h.s.e.p.EventHubPublisher - Event Hub 발행 시뮬레이션: +2025-10-29 10:26:44 [ForkJoinPool.commonPool-worker-1] DEBUG c.u.h.s.e.p.EventHubPublisher - Topic: transcription-events +2025-10-29 10:26:44 [ForkJoinPool.commonPool-worker-1] DEBUG c.u.h.s.e.p.EventHubPublisher - Event Data: {"eventId":"6e6d8b0c-d77d-49fe-b1c0-a3d537ec2068","eventType":"SegmentCreated","segmentId":"f2747004-8e9a-45fe-b0a5-86331c5c6918","recordingId":"test-meeting-001","meetingId":"test-meeting-001","text":"마케팅 예산 배분 계획을 수립해야 합니다.","speakerId":"UNKNOWN","speakerName":"참석자","timestamp":[2025,10,29,10,26,44,466351000],"duration":5.0,"confidence":0.85,"warningFlag":false,"eventTime":[2025,10,29,10,26,44,466398000]} +2025-10-29 10:26:44 [ForkJoinPool.commonPool-worker-1] INFO c.u.h.s.e.p.EventHubPublisher - 이벤트 발행 완료 - topic: transcription-events, event: SegmentCreated +2025-10-29 10:26:44 [scheduling-1] INFO c.u.h.s.c.AudioWebSocketHandler - STT 결과 전송 완료 - meetingId: test-meeting-001, sessions: 1개, text: 마케팅 예산 배분 계획을 수립해야 합니다. +2025-10-29 10:26:44 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - WebSocket 결과 전송 완료 - meetingId: test-meeting-001, text: 마케팅 예산 배분 계획을 수립해야 합니다. +2025-10-29 10:26:44 [scheduling-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 삭제 완료 - meetingId: test-meeting-001 +2025-10-29 10:26:44 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 회의 처리 완료 - meetingId: test-meeting-001, text: 마케팅 예산 배분 계획을 수립해야 합니다. +2025-10-29 10:26:44 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:26:44 [http-nio-8084-exec-6] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 435 +2025-10-29 10:26:44 [http-nio-8084-exec-6] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 435, size: 8236 bytes +2025-10-29 10:26:44 [http-nio-8084-exec-7] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 436 +2025-10-29 10:26:44 [http-nio-8084-exec-7] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 436, size: 8236 bytes +2025-10-29 10:26:44 [http-nio-8084-exec-8] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 437 +2025-10-29 10:26:44 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 437, size: 8236 bytes +2025-10-29 10:26:45 [http-nio-8084-exec-9] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 438 +2025-10-29 10:26:45 [http-nio-8084-exec-9] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 438, size: 8236 bytes +2025-10-29 10:26:45 [http-nio-8084-exec-10] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 439 +2025-10-29 10:26:45 [http-nio-8084-exec-10] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 439, size: 8236 bytes +2025-10-29 10:26:45 [http-nio-8084-exec-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 440 +2025-10-29 10:26:45 [http-nio-8084-exec-1] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 440, size: 8236 bytes +2025-10-29 10:26:45 [http-nio-8084-exec-2] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 441 +2025-10-29 10:26:45 [http-nio-8084-exec-2] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 441, size: 8236 bytes +2025-10-29 10:26:46 [http-nio-8084-exec-3] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 442 +2025-10-29 10:26:46 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 442, size: 8236 bytes +2025-10-29 10:26:46 [http-nio-8084-exec-4] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 443 +2025-10-29 10:26:46 [http-nio-8084-exec-4] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 443, size: 8236 bytes +2025-10-29 10:26:46 [http-nio-8084-exec-5] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 444 +2025-10-29 10:26:46 [http-nio-8084-exec-5] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 444, size: 8236 bytes +2025-10-29 10:26:46 [http-nio-8084-exec-6] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 445 +2025-10-29 10:26:46 [http-nio-8084-exec-6] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 445, size: 8236 bytes +2025-10-29 10:26:47 [http-nio-8084-exec-7] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 446 +2025-10-29 10:26:47 [http-nio-8084-exec-7] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 446, size: 8236 bytes +2025-10-29 10:26:47 [http-nio-8084-exec-8] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 447 +2025-10-29 10:26:47 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 447, size: 8236 bytes +2025-10-29 10:26:47 [http-nio-8084-exec-9] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 448 +2025-10-29 10:26:47 [http-nio-8084-exec-9] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 448, size: 8236 bytes +2025-10-29 10:26:48 [http-nio-8084-exec-10] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 449 +2025-10-29 10:26:48 [http-nio-8084-exec-10] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 449, size: 8236 bytes +2025-10-29 10:26:48 [http-nio-8084-exec-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 450 +2025-10-29 10:26:48 [http-nio-8084-exec-1] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 450, size: 8236 bytes +2025-10-29 10:26:48 [http-nio-8084-exec-2] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 451 +2025-10-29 10:26:48 [http-nio-8084-exec-2] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 451, size: 8236 bytes +2025-10-29 10:26:48 [http-nio-8084-exec-3] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 452 +2025-10-29 10:26:48 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 452, size: 8236 bytes +2025-10-29 10:26:49 [http-nio-8084-exec-4] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 453 +2025-10-29 10:26:49 [http-nio-8084-exec-4] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 453, size: 8236 bytes +2025-10-29 10:26:49 [http-nio-8084-exec-5] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 454 +2025-10-29 10:26:49 [http-nio-8084-exec-5] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 454, size: 8236 bytes +2025-10-29 10:26:49 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:26:49 [scheduling-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 조회 완료 - meetingId: test-meeting-001, count: 19 +2025-10-29 10:26:49 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 오디오 청크 조회 완료 - meetingId: test-meeting-001, chunks: 19개 +2025-10-29 10:26:49 [scheduling-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 병합 완료 - chunks: 19, totalSize: 156484 +2025-10-29 10:26:49 [scheduling-1] WARN c.u.h.stt.service.AzureSpeechService - Azure Speech Service 비활성화 - 시뮬레이션 결과 반환 +2025-10-29 10:26:49 [scheduling-1] INFO c.u.h.stt.service.AzureSpeechService - [시뮬레이션] 음성 인식 결과: 프로젝트 일정 조정이 필요할 것 같습니다. +2025-10-29 10:26:49 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - Event Hub 이벤트 발행 완료 - meetingId: test-meeting-001, text: 프로젝트 일정 조정이 필요할 것 같습니다. +2025-10-29 10:26:49 [ForkJoinPool.commonPool-worker-1] DEBUG c.u.h.s.e.p.EventHubPublisher - Event Hub 발행 시뮬레이션: +2025-10-29 10:26:49 [ForkJoinPool.commonPool-worker-1] DEBUG c.u.h.s.e.p.EventHubPublisher - Topic: transcription-events +2025-10-29 10:26:49 [ForkJoinPool.commonPool-worker-1] DEBUG c.u.h.s.e.p.EventHubPublisher - Event Data: {"eventId":"338d0359-3e57-42e5-89c8-1522461bdc97","eventType":"SegmentCreated","segmentId":"b63d6562-0687-4678-b555-53a494076bfd","recordingId":"test-meeting-001","meetingId":"test-meeting-001","text":"프로젝트 일정 조정이 필요할 것 같습니다.","speakerId":"UNKNOWN","speakerName":"참석자","timestamp":[2025,10,29,10,26,49,580596000],"duration":5.0,"confidence":0.85,"warningFlag":false,"eventTime":[2025,10,29,10,26,49,580619000]} +2025-10-29 10:26:49 [ForkJoinPool.commonPool-worker-1] INFO c.u.h.s.e.p.EventHubPublisher - 이벤트 발행 완료 - topic: transcription-events, event: SegmentCreated +2025-10-29 10:26:49 [scheduling-1] INFO c.u.h.s.c.AudioWebSocketHandler - STT 결과 전송 완료 - meetingId: test-meeting-001, sessions: 1개, text: 프로젝트 일정 조정이 필요할 것 같습니다. +2025-10-29 10:26:49 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - WebSocket 결과 전송 완료 - meetingId: test-meeting-001, text: 프로젝트 일정 조정이 필요할 것 같습니다. +2025-10-29 10:26:49 [scheduling-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 삭제 완료 - meetingId: test-meeting-001 +2025-10-29 10:26:49 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 회의 처리 완료 - meetingId: test-meeting-001, text: 프로젝트 일정 조정이 필요할 것 같습니다. +2025-10-29 10:26:49 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:26:49 [http-nio-8084-exec-6] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 455 +2025-10-29 10:26:49 [http-nio-8084-exec-6] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 455, size: 8236 bytes +2025-10-29 10:26:49 [http-nio-8084-exec-7] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 456 +2025-10-29 10:26:49 [http-nio-8084-exec-7] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 456, size: 8236 bytes +2025-10-29 10:26:50 [http-nio-8084-exec-8] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 457 +2025-10-29 10:26:50 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 457, size: 8236 bytes +2025-10-29 10:26:50 [http-nio-8084-exec-9] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 458 +2025-10-29 10:26:50 [http-nio-8084-exec-9] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 458, size: 8236 bytes +2025-10-29 10:26:50 [http-nio-8084-exec-10] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 459 +2025-10-29 10:26:50 [http-nio-8084-exec-10] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 459, size: 8236 bytes +2025-10-29 10:26:50 [http-nio-8084-exec-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 460 +2025-10-29 10:26:50 [http-nio-8084-exec-1] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 460, size: 8236 bytes +2025-10-29 10:26:51 [http-nio-8084-exec-2] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 461 +2025-10-29 10:26:51 [http-nio-8084-exec-2] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 461, size: 8236 bytes +2025-10-29 10:26:51 [http-nio-8084-exec-3] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 462 +2025-10-29 10:26:51 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 462, size: 8236 bytes +2025-10-29 10:26:51 [http-nio-8084-exec-4] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 463 +2025-10-29 10:26:51 [http-nio-8084-exec-4] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 463, size: 8236 bytes +2025-10-29 10:26:51 [http-nio-8084-exec-5] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 464 +2025-10-29 10:26:51 [http-nio-8084-exec-5] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 464, size: 8236 bytes +2025-10-29 10:26:52 [http-nio-8084-exec-6] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 465 +2025-10-29 10:26:52 [http-nio-8084-exec-6] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 465, size: 8236 bytes +2025-10-29 10:26:52 [http-nio-8084-exec-7] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 466 +2025-10-29 10:26:52 [http-nio-8084-exec-7] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 466, size: 8236 bytes +2025-10-29 10:26:52 [http-nio-8084-exec-8] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 467 +2025-10-29 10:26:52 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 467, size: 8236 bytes +2025-10-29 10:26:52 [http-nio-8084-exec-9] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 468 +2025-10-29 10:26:52 [http-nio-8084-exec-9] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 468, size: 8236 bytes +2025-10-29 10:26:53 [http-nio-8084-exec-10] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 469 +2025-10-29 10:26:53 [http-nio-8084-exec-10] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 469, size: 8236 bytes +2025-10-29 10:26:53 [http-nio-8084-exec-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 470 +2025-10-29 10:26:53 [http-nio-8084-exec-1] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 470, size: 8236 bytes +2025-10-29 10:26:53 [http-nio-8084-exec-2] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 471 +2025-10-29 10:26:53 [http-nio-8084-exec-2] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 471, size: 8236 bytes +2025-10-29 10:26:53 [http-nio-8084-exec-3] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 472 +2025-10-29 10:26:53 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 472, size: 8236 bytes +2025-10-29 10:26:54 [http-nio-8084-exec-4] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 473 +2025-10-29 10:26:54 [http-nio-8084-exec-4] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 473, size: 8236 bytes +2025-10-29 10:26:54 [http-nio-8084-exec-5] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 474 +2025-10-29 10:26:54 [http-nio-8084-exec-5] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 474, size: 8236 bytes +2025-10-29 10:26:54 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:26:54 [scheduling-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 조회 완료 - meetingId: test-meeting-001, count: 19 +2025-10-29 10:26:54 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 오디오 청크 조회 완료 - meetingId: test-meeting-001, chunks: 19개 +2025-10-29 10:26:54 [scheduling-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 병합 완료 - chunks: 19, totalSize: 156484 +2025-10-29 10:26:54 [scheduling-1] WARN c.u.h.stt.service.AzureSpeechService - Azure Speech Service 비활성화 - 시뮬레이션 결과 반환 +2025-10-29 10:26:54 [scheduling-1] INFO c.u.h.stt.service.AzureSpeechService - [시뮬레이션] 음성 인식 결과: 기술 스택 선정에 대한 의견을 나누고 있습니다. +2025-10-29 10:26:54 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - Event Hub 이벤트 발행 완료 - meetingId: test-meeting-001, text: 기술 스택 선정에 대한 의견을 나누고 있습니다. +2025-10-29 10:26:54 [ForkJoinPool.commonPool-worker-1] DEBUG c.u.h.s.e.p.EventHubPublisher - Event Hub 발행 시뮬레이션: +2025-10-29 10:26:54 [ForkJoinPool.commonPool-worker-1] DEBUG c.u.h.s.e.p.EventHubPublisher - Topic: transcription-events +2025-10-29 10:26:54 [ForkJoinPool.commonPool-worker-1] DEBUG c.u.h.s.e.p.EventHubPublisher - Event Data: {"eventId":"1bed6a3b-15c1-4fcb-a2bf-2c420bd55151","eventType":"SegmentCreated","segmentId":"d3d4a466-516e-4c57-ae39-1dc409beeec4","recordingId":"test-meeting-001","meetingId":"test-meeting-001","text":"기술 스택 선정에 대한 의견을 나누고 있습니다.","speakerId":"UNKNOWN","speakerName":"참석자","timestamp":[2025,10,29,10,26,54,702632000],"duration":5.0,"confidence":0.85,"warningFlag":false,"eventTime":[2025,10,29,10,26,54,702663000]} +2025-10-29 10:26:54 [ForkJoinPool.commonPool-worker-1] INFO c.u.h.s.e.p.EventHubPublisher - 이벤트 발행 완료 - topic: transcription-events, event: SegmentCreated +2025-10-29 10:26:54 [scheduling-1] INFO c.u.h.s.c.AudioWebSocketHandler - STT 결과 전송 완료 - meetingId: test-meeting-001, sessions: 1개, text: 기술 스택 선정에 대한 의견을 나누고 있습니다. +2025-10-29 10:26:54 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - WebSocket 결과 전송 완료 - meetingId: test-meeting-001, text: 기술 스택 선정에 대한 의견을 나누고 있습니다. +2025-10-29 10:26:54 [http-nio-8084-exec-6] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 475 +2025-10-29 10:26:54 [scheduling-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 삭제 완료 - meetingId: test-meeting-001 +2025-10-29 10:26:54 [http-nio-8084-exec-6] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 475, size: 8236 bytes +2025-10-29 10:26:54 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 회의 처리 완료 - meetingId: test-meeting-001, text: 기술 스택 선정에 대한 의견을 나누고 있습니다. +2025-10-29 10:26:54 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:26:54 [http-nio-8084-exec-7] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 476 +2025-10-29 10:26:54 [http-nio-8084-exec-7] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 476, size: 8236 bytes +2025-10-29 10:26:55 [http-nio-8084-exec-8] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 477 +2025-10-29 10:26:55 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 477, size: 8236 bytes +2025-10-29 10:26:55 [http-nio-8084-exec-9] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 478 +2025-10-29 10:26:55 [http-nio-8084-exec-9] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 478, size: 8236 bytes +2025-10-29 10:26:55 [http-nio-8084-exec-10] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 479 +2025-10-29 10:26:55 [http-nio-8084-exec-10] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 479, size: 8236 bytes +2025-10-29 10:26:55 [http-nio-8084-exec-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 480 +2025-10-29 10:26:55 [http-nio-8084-exec-1] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 480, size: 8236 bytes +2025-10-29 10:26:56 [http-nio-8084-exec-2] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 481 +2025-10-29 10:26:56 [http-nio-8084-exec-2] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 481, size: 8236 bytes +2025-10-29 10:26:56 [http-nio-8084-exec-3] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 482 +2025-10-29 10:26:56 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 482, size: 8236 bytes +2025-10-29 10:26:56 [http-nio-8084-exec-4] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 483 +2025-10-29 10:26:56 [http-nio-8084-exec-4] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 483, size: 8236 bytes +2025-10-29 10:26:56 [http-nio-8084-exec-5] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 484 +2025-10-29 10:26:56 [http-nio-8084-exec-5] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 484, size: 8236 bytes +2025-10-29 10:26:57 [http-nio-8084-exec-6] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 485 +2025-10-29 10:26:57 [http-nio-8084-exec-6] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 485, size: 8236 bytes +2025-10-29 10:26:57 [http-nio-8084-exec-7] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 486 +2025-10-29 10:26:57 [http-nio-8084-exec-7] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 486, size: 8236 bytes +2025-10-29 10:26:57 [http-nio-8084-exec-8] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 487 +2025-10-29 10:26:57 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 487, size: 8236 bytes +2025-10-29 10:26:58 [http-nio-8084-exec-9] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 488 +2025-10-29 10:26:58 [http-nio-8084-exec-9] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 488, size: 8236 bytes +2025-10-29 10:26:58 [http-nio-8084-exec-10] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 489 +2025-10-29 10:26:58 [http-nio-8084-exec-10] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 489, size: 8236 bytes +2025-10-29 10:26:58 [http-nio-8084-exec-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 490 +2025-10-29 10:26:58 [http-nio-8084-exec-1] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 490, size: 8236 bytes +2025-10-29 10:26:58 [http-nio-8084-exec-2] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 491 +2025-10-29 10:26:58 [http-nio-8084-exec-2] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 491, size: 8236 bytes +2025-10-29 10:26:59 [http-nio-8084-exec-3] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 492 +2025-10-29 10:26:59 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 492, size: 8236 bytes +2025-10-29 10:26:59 [http-nio-8084-exec-4] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 493 +2025-10-29 10:26:59 [http-nio-8084-exec-4] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 493, size: 8236 bytes +2025-10-29 10:26:59 [http-nio-8084-exec-5] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 494 +2025-10-29 10:26:59 [http-nio-8084-exec-5] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 494, size: 8236 bytes +2025-10-29 10:26:59 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:26:59 [scheduling-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 조회 완료 - meetingId: test-meeting-001, count: 19 +2025-10-29 10:26:59 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 오디오 청크 조회 완료 - meetingId: test-meeting-001, chunks: 19개 +2025-10-29 10:26:59 [scheduling-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 병합 완료 - chunks: 19, totalSize: 156484 +2025-10-29 10:26:59 [scheduling-1] WARN c.u.h.stt.service.AzureSpeechService - Azure Speech Service 비활성화 - 시뮬레이션 결과 반환 +2025-10-29 10:26:59 [scheduling-1] INFO c.u.h.stt.service.AzureSpeechService - [시뮬레이션] 음성 인식 결과: 프로젝트 일정 조정이 필요할 것 같습니다. +2025-10-29 10:26:59 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - Event Hub 이벤트 발행 완료 - meetingId: test-meeting-001, text: 프로젝트 일정 조정이 필요할 것 같습니다. +2025-10-29 10:26:59 [ForkJoinPool.commonPool-worker-1] DEBUG c.u.h.s.e.p.EventHubPublisher - Event Hub 발행 시뮬레이션: +2025-10-29 10:26:59 [ForkJoinPool.commonPool-worker-1] DEBUG c.u.h.s.e.p.EventHubPublisher - Topic: transcription-events +2025-10-29 10:26:59 [ForkJoinPool.commonPool-worker-1] DEBUG c.u.h.s.e.p.EventHubPublisher - Event Data: {"eventId":"ac3f3e59-086a-46b1-a298-bf0658fc297d","eventType":"SegmentCreated","segmentId":"a2fc13c5-fb06-4a7a-ae47-0f61fcc058ef","recordingId":"test-meeting-001","meetingId":"test-meeting-001","text":"프로젝트 일정 조정이 필요할 것 같습니다.","speakerId":"UNKNOWN","speakerName":"참석자","timestamp":[2025,10,29,10,26,59,818353000],"duration":5.0,"confidence":0.85,"warningFlag":false,"eventTime":[2025,10,29,10,26,59,818382000]} +2025-10-29 10:26:59 [ForkJoinPool.commonPool-worker-1] INFO c.u.h.s.e.p.EventHubPublisher - 이벤트 발행 완료 - topic: transcription-events, event: SegmentCreated +2025-10-29 10:26:59 [scheduling-1] INFO c.u.h.s.c.AudioWebSocketHandler - STT 결과 전송 완료 - meetingId: test-meeting-001, sessions: 1개, text: 프로젝트 일정 조정이 필요할 것 같습니다. +2025-10-29 10:26:59 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - WebSocket 결과 전송 완료 - meetingId: test-meeting-001, text: 프로젝트 일정 조정이 필요할 것 같습니다. +2025-10-29 10:26:59 [scheduling-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 삭제 완료 - meetingId: test-meeting-001 +2025-10-29 10:26:59 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 회의 처리 완료 - meetingId: test-meeting-001, text: 프로젝트 일정 조정이 필요할 것 같습니다. +2025-10-29 10:26:59 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:26:59 [http-nio-8084-exec-6] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 495 +2025-10-29 10:26:59 [http-nio-8084-exec-6] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 495, size: 8236 bytes +2025-10-29 10:27:00 [http-nio-8084-exec-7] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 496 +2025-10-29 10:27:00 [http-nio-8084-exec-7] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 496, size: 8236 bytes +2025-10-29 10:27:00 [http-nio-8084-exec-8] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 497 +2025-10-29 10:27:00 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 497, size: 8236 bytes +2025-10-29 10:27:00 [http-nio-8084-exec-9] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 498 +2025-10-29 10:27:00 [http-nio-8084-exec-9] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 498, size: 8236 bytes +2025-10-29 10:27:00 [http-nio-8084-exec-10] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 499 +2025-10-29 10:27:00 [http-nio-8084-exec-10] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 499, size: 8236 bytes +2025-10-29 10:27:01 [http-nio-8084-exec-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 500 +2025-10-29 10:27:01 [http-nio-8084-exec-1] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 500, size: 8236 bytes +2025-10-29 10:27:01 [http-nio-8084-exec-2] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 501 +2025-10-29 10:27:01 [http-nio-8084-exec-2] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 501, size: 8236 bytes +2025-10-29 10:27:01 [http-nio-8084-exec-3] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 502 +2025-10-29 10:27:01 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 502, size: 8236 bytes +2025-10-29 10:27:01 [http-nio-8084-exec-4] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 503 +2025-10-29 10:27:01 [http-nio-8084-exec-4] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 503, size: 8236 bytes +2025-10-29 10:27:02 [http-nio-8084-exec-5] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 504 +2025-10-29 10:27:02 [http-nio-8084-exec-5] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 504, size: 8236 bytes +2025-10-29 10:27:02 [http-nio-8084-exec-6] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 505 +2025-10-29 10:27:02 [http-nio-8084-exec-6] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 505, size: 8236 bytes +2025-10-29 10:27:02 [http-nio-8084-exec-7] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 506 +2025-10-29 10:27:02 [http-nio-8084-exec-7] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 506, size: 8236 bytes +2025-10-29 10:27:02 [http-nio-8084-exec-8] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 507 +2025-10-29 10:27:02 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 507, size: 8236 bytes +2025-10-29 10:27:03 [http-nio-8084-exec-9] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 508 +2025-10-29 10:27:03 [http-nio-8084-exec-9] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 508, size: 8236 bytes +2025-10-29 10:27:03 [http-nio-8084-exec-10] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 509 +2025-10-29 10:27:03 [http-nio-8084-exec-10] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 509, size: 8236 bytes +2025-10-29 10:27:03 [http-nio-8084-exec-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 510 +2025-10-29 10:27:03 [http-nio-8084-exec-1] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 510, size: 8236 bytes +2025-10-29 10:27:03 [http-nio-8084-exec-2] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 511 +2025-10-29 10:27:03 [http-nio-8084-exec-2] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 511, size: 8236 bytes +2025-10-29 10:27:04 [http-nio-8084-exec-3] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 512 +2025-10-29 10:27:04 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 512, size: 8236 bytes +2025-10-29 10:27:04 [http-nio-8084-exec-4] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 513 +2025-10-29 10:27:04 [http-nio-8084-exec-4] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 513, size: 8236 bytes +2025-10-29 10:27:04 [http-nio-8084-exec-5] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 514 +2025-10-29 10:27:04 [http-nio-8084-exec-5] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 514, size: 8236 bytes +2025-10-29 10:27:04 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:27:04 [scheduling-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 조회 완료 - meetingId: test-meeting-001, count: 19 +2025-10-29 10:27:04 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 오디오 청크 조회 완료 - meetingId: test-meeting-001, chunks: 19개 +2025-10-29 10:27:04 [scheduling-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 병합 완료 - chunks: 19, totalSize: 156484 +2025-10-29 10:27:04 [scheduling-1] WARN c.u.h.stt.service.AzureSpeechService - Azure Speech Service 비활성화 - 시뮬레이션 결과 반환 +2025-10-29 10:27:04 [scheduling-1] INFO c.u.h.stt.service.AzureSpeechService - [시뮬레이션] 음성 인식 결과: 프로젝트 일정 조정이 필요할 것 같습니다. +2025-10-29 10:27:04 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - Event Hub 이벤트 발행 완료 - meetingId: test-meeting-001, text: 프로젝트 일정 조정이 필요할 것 같습니다. +2025-10-29 10:27:04 [ForkJoinPool.commonPool-worker-1] DEBUG c.u.h.s.e.p.EventHubPublisher - Event Hub 발행 시뮬레이션: +2025-10-29 10:27:04 [ForkJoinPool.commonPool-worker-1] DEBUG c.u.h.s.e.p.EventHubPublisher - Topic: transcription-events +2025-10-29 10:27:04 [ForkJoinPool.commonPool-worker-1] DEBUG c.u.h.s.e.p.EventHubPublisher - Event Data: {"eventId":"9bdf0ea1-e038-486f-bc69-8efc4975ac29","eventType":"SegmentCreated","segmentId":"6e80a33a-ce72-4cb7-88ae-7cd50a6ae51c","recordingId":"test-meeting-001","meetingId":"test-meeting-001","text":"프로젝트 일정 조정이 필요할 것 같습니다.","speakerId":"UNKNOWN","speakerName":"참석자","timestamp":[2025,10,29,10,27,4,914856000],"duration":5.0,"confidence":0.85,"warningFlag":false,"eventTime":[2025,10,29,10,27,4,914903000]} +2025-10-29 10:27:04 [ForkJoinPool.commonPool-worker-1] INFO c.u.h.s.e.p.EventHubPublisher - 이벤트 발행 완료 - topic: transcription-events, event: SegmentCreated +2025-10-29 10:27:04 [scheduling-1] INFO c.u.h.s.c.AudioWebSocketHandler - STT 결과 전송 완료 - meetingId: test-meeting-001, sessions: 1개, text: 프로젝트 일정 조정이 필요할 것 같습니다. +2025-10-29 10:27:04 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - WebSocket 결과 전송 완료 - meetingId: test-meeting-001, text: 프로젝트 일정 조정이 필요할 것 같습니다. +2025-10-29 10:27:04 [scheduling-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 삭제 완료 - meetingId: test-meeting-001 +2025-10-29 10:27:04 [http-nio-8084-exec-6] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 515 +2025-10-29 10:27:04 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 회의 처리 완료 - meetingId: test-meeting-001, text: 프로젝트 일정 조정이 필요할 것 같습니다. +2025-10-29 10:27:04 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:27:04 [http-nio-8084-exec-6] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 515, size: 8236 bytes +2025-10-29 10:27:05 [http-nio-8084-exec-7] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 516 +2025-10-29 10:27:05 [http-nio-8084-exec-7] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 516, size: 8236 bytes +2025-10-29 10:27:05 [http-nio-8084-exec-8] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 517 +2025-10-29 10:27:05 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 517, size: 8236 bytes +2025-10-29 10:27:05 [http-nio-8084-exec-9] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 518 +2025-10-29 10:27:05 [http-nio-8084-exec-9] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 518, size: 8236 bytes +2025-10-29 10:27:05 [http-nio-8084-exec-10] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 519 +2025-10-29 10:27:05 [http-nio-8084-exec-10] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 519, size: 8236 bytes +2025-10-29 10:27:06 [http-nio-8084-exec-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 520 +2025-10-29 10:27:06 [http-nio-8084-exec-1] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 520, size: 8236 bytes +2025-10-29 10:27:06 [http-nio-8084-exec-2] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 521 +2025-10-29 10:27:06 [http-nio-8084-exec-2] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 521, size: 8236 bytes +2025-10-29 10:27:06 [http-nio-8084-exec-3] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 522 +2025-10-29 10:27:06 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 522, size: 8236 bytes +2025-10-29 10:27:06 [http-nio-8084-exec-4] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 523 +2025-10-29 10:27:06 [http-nio-8084-exec-4] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 523, size: 8236 bytes +2025-10-29 10:27:07 [http-nio-8084-exec-5] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 524 +2025-10-29 10:27:07 [http-nio-8084-exec-5] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 524, size: 8236 bytes +2025-10-29 10:27:07 [http-nio-8084-exec-6] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 525 +2025-10-29 10:27:07 [http-nio-8084-exec-6] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 525, size: 8236 bytes +2025-10-29 10:27:07 [http-nio-8084-exec-7] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 526 +2025-10-29 10:27:07 [http-nio-8084-exec-7] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 526, size: 8236 bytes +2025-10-29 10:27:07 [http-nio-8084-exec-8] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 527 +2025-10-29 10:27:07 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 527, size: 8236 bytes +2025-10-29 10:27:08 [http-nio-8084-exec-9] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 528 +2025-10-29 10:27:08 [http-nio-8084-exec-9] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 528, size: 8236 bytes +2025-10-29 10:27:08 [http-nio-8084-exec-10] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 529 +2025-10-29 10:27:08 [http-nio-8084-exec-10] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 529, size: 8236 bytes +2025-10-29 10:27:08 [http-nio-8084-exec-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 530 +2025-10-29 10:27:08 [http-nio-8084-exec-1] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 530, size: 8236 bytes +2025-10-29 10:27:08 [http-nio-8084-exec-2] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 531 +2025-10-29 10:27:08 [http-nio-8084-exec-2] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 531, size: 8236 bytes +2025-10-29 10:27:09 [http-nio-8084-exec-3] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 532 +2025-10-29 10:27:09 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 532, size: 8236 bytes +2025-10-29 10:27:09 [http-nio-8084-exec-4] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 533 +2025-10-29 10:27:09 [http-nio-8084-exec-4] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 533, size: 8236 bytes +2025-10-29 10:27:09 [http-nio-8084-exec-5] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 534 +2025-10-29 10:27:09 [http-nio-8084-exec-5] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 534, size: 8236 bytes +2025-10-29 10:27:09 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:27:10 [scheduling-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 조회 완료 - meetingId: test-meeting-001, count: 19 +2025-10-29 10:27:10 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 오디오 청크 조회 완료 - meetingId: test-meeting-001, chunks: 19개 +2025-10-29 10:27:10 [scheduling-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 병합 완료 - chunks: 19, totalSize: 156484 +2025-10-29 10:27:10 [scheduling-1] WARN c.u.h.stt.service.AzureSpeechService - Azure Speech Service 비활성화 - 시뮬레이션 결과 반환 +2025-10-29 10:27:10 [scheduling-1] INFO c.u.h.stt.service.AzureSpeechService - [시뮬레이션] 음성 인식 결과: 마케팅 예산 배분 계획을 수립해야 합니다. +2025-10-29 10:27:10 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - Event Hub 이벤트 발행 완료 - meetingId: test-meeting-001, text: 마케팅 예산 배분 계획을 수립해야 합니다. +2025-10-29 10:27:10 [ForkJoinPool.commonPool-worker-1] DEBUG c.u.h.s.e.p.EventHubPublisher - Event Hub 발행 시뮬레이션: +2025-10-29 10:27:10 [ForkJoinPool.commonPool-worker-1] DEBUG c.u.h.s.e.p.EventHubPublisher - Topic: transcription-events +2025-10-29 10:27:10 [ForkJoinPool.commonPool-worker-1] DEBUG c.u.h.s.e.p.EventHubPublisher - Event Data: {"eventId":"07ebe88a-4835-4be7-8efc-f91a6a16367a","eventType":"SegmentCreated","segmentId":"d9b187fb-7f74-4b67-ad7c-5a564e9c5817","recordingId":"test-meeting-001","meetingId":"test-meeting-001","text":"마케팅 예산 배분 계획을 수립해야 합니다.","speakerId":"UNKNOWN","speakerName":"참석자","timestamp":[2025,10,29,10,27,10,23423000],"duration":5.0,"confidence":0.85,"warningFlag":false,"eventTime":[2025,10,29,10,27,10,23447000]} +2025-10-29 10:27:10 [ForkJoinPool.commonPool-worker-1] INFO c.u.h.s.e.p.EventHubPublisher - 이벤트 발행 완료 - topic: transcription-events, event: SegmentCreated +2025-10-29 10:27:10 [scheduling-1] INFO c.u.h.s.c.AudioWebSocketHandler - STT 결과 전송 완료 - meetingId: test-meeting-001, sessions: 1개, text: 마케팅 예산 배분 계획을 수립해야 합니다. +2025-10-29 10:27:10 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - WebSocket 결과 전송 완료 - meetingId: test-meeting-001, text: 마케팅 예산 배분 계획을 수립해야 합니다. +2025-10-29 10:27:10 [scheduling-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 삭제 완료 - meetingId: test-meeting-001 +2025-10-29 10:27:10 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 회의 처리 완료 - meetingId: test-meeting-001, text: 마케팅 예산 배분 계획을 수립해야 합니다. +2025-10-29 10:27:10 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:27:10 [http-nio-8084-exec-6] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 535 +2025-10-29 10:27:10 [http-nio-8084-exec-6] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 535, size: 8236 bytes +2025-10-29 10:27:10 [http-nio-8084-exec-7] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 536 +2025-10-29 10:27:10 [http-nio-8084-exec-7] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 536, size: 8236 bytes +2025-10-29 10:27:10 [http-nio-8084-exec-8] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 537 +2025-10-29 10:27:10 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 537, size: 8236 bytes +2025-10-29 10:27:10 [http-nio-8084-exec-9] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 538 +2025-10-29 10:27:10 [http-nio-8084-exec-9] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 538, size: 8236 bytes +2025-10-29 10:27:11 [http-nio-8084-exec-10] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 539 +2025-10-29 10:27:11 [http-nio-8084-exec-10] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 539, size: 8236 bytes +2025-10-29 10:27:11 [http-nio-8084-exec-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 540 +2025-10-29 10:27:11 [http-nio-8084-exec-1] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 540, size: 8236 bytes +2025-10-29 10:27:11 [http-nio-8084-exec-2] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 541 +2025-10-29 10:27:11 [http-nio-8084-exec-2] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 541, size: 8236 bytes +2025-10-29 10:27:11 [http-nio-8084-exec-3] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 542 +2025-10-29 10:27:11 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 542, size: 8236 bytes +2025-10-29 10:27:12 [http-nio-8084-exec-4] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 543 +2025-10-29 10:27:12 [http-nio-8084-exec-4] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 543, size: 8236 bytes +2025-10-29 10:27:12 [http-nio-8084-exec-5] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 544 +2025-10-29 10:27:12 [http-nio-8084-exec-5] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 544, size: 8236 bytes +2025-10-29 10:27:12 [http-nio-8084-exec-6] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 545 +2025-10-29 10:27:12 [http-nio-8084-exec-6] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 545, size: 8236 bytes +2025-10-29 10:27:12 [http-nio-8084-exec-7] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 546 +2025-10-29 10:27:12 [http-nio-8084-exec-7] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 546, size: 8236 bytes +2025-10-29 10:27:13 [http-nio-8084-exec-8] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 547 +2025-10-29 10:27:13 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 547, size: 8236 bytes +2025-10-29 10:27:13 [http-nio-8084-exec-9] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 548 +2025-10-29 10:27:13 [http-nio-8084-exec-9] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 548, size: 8236 bytes +2025-10-29 10:27:13 [http-nio-8084-exec-10] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 549 +2025-10-29 10:27:13 [http-nio-8084-exec-10] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 549, size: 8236 bytes +2025-10-29 10:27:13 [http-nio-8084-exec-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 550 +2025-10-29 10:27:13 [http-nio-8084-exec-1] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 550, size: 8236 bytes +2025-10-29 10:27:14 [http-nio-8084-exec-2] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 551 +2025-10-29 10:27:14 [http-nio-8084-exec-2] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 551, size: 8236 bytes +2025-10-29 10:27:14 [http-nio-8084-exec-3] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 552 +2025-10-29 10:27:14 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 552, size: 8236 bytes +2025-10-29 10:27:14 [http-nio-8084-exec-4] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 553 +2025-10-29 10:27:14 [http-nio-8084-exec-4] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 553, size: 8236 bytes +2025-10-29 10:27:14 [http-nio-8084-exec-5] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 554 +2025-10-29 10:27:14 [http-nio-8084-exec-5] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 554, size: 8236 bytes +2025-10-29 10:27:15 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:27:15 [scheduling-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 조회 완료 - meetingId: test-meeting-001, count: 19 +2025-10-29 10:27:15 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 오디오 청크 조회 완료 - meetingId: test-meeting-001, chunks: 19개 +2025-10-29 10:27:15 [scheduling-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 병합 완료 - chunks: 19, totalSize: 156484 +2025-10-29 10:27:15 [scheduling-1] WARN c.u.h.stt.service.AzureSpeechService - Azure Speech Service 비활성화 - 시뮬레이션 결과 반환 +2025-10-29 10:27:15 [scheduling-1] INFO c.u.h.stt.service.AzureSpeechService - [시뮬레이션] 음성 인식 결과: 프로젝트 일정 조정이 필요할 것 같습니다. +2025-10-29 10:27:15 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - Event Hub 이벤트 발행 완료 - meetingId: test-meeting-001, text: 프로젝트 일정 조정이 필요할 것 같습니다. +2025-10-29 10:27:15 [ForkJoinPool.commonPool-worker-1] DEBUG c.u.h.s.e.p.EventHubPublisher - Event Hub 발행 시뮬레이션: +2025-10-29 10:27:15 [ForkJoinPool.commonPool-worker-1] DEBUG c.u.h.s.e.p.EventHubPublisher - Topic: transcription-events +2025-10-29 10:27:15 [ForkJoinPool.commonPool-worker-1] DEBUG c.u.h.s.e.p.EventHubPublisher - Event Data: {"eventId":"2a71b9e4-46f2-4e48-ac80-664fc37d56e7","eventType":"SegmentCreated","segmentId":"58d68176-ccf7-431d-bcb9-9e3f4e9dd52e","recordingId":"test-meeting-001","meetingId":"test-meeting-001","text":"프로젝트 일정 조정이 필요할 것 같습니다.","speakerId":"UNKNOWN","speakerName":"참석자","timestamp":[2025,10,29,10,27,15,142428000],"duration":5.0,"confidence":0.85,"warningFlag":false,"eventTime":[2025,10,29,10,27,15,142451000]} +2025-10-29 10:27:15 [ForkJoinPool.commonPool-worker-1] INFO c.u.h.s.e.p.EventHubPublisher - 이벤트 발행 완료 - topic: transcription-events, event: SegmentCreated +2025-10-29 10:27:15 [scheduling-1] INFO c.u.h.s.c.AudioWebSocketHandler - STT 결과 전송 완료 - meetingId: test-meeting-001, sessions: 1개, text: 프로젝트 일정 조정이 필요할 것 같습니다. +2025-10-29 10:27:15 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - WebSocket 결과 전송 완료 - meetingId: test-meeting-001, text: 프로젝트 일정 조정이 필요할 것 같습니다. +2025-10-29 10:27:15 [scheduling-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 삭제 완료 - meetingId: test-meeting-001 +2025-10-29 10:27:15 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 회의 처리 완료 - meetingId: test-meeting-001, text: 프로젝트 일정 조정이 필요할 것 같습니다. +2025-10-29 10:27:15 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:27:15 [http-nio-8084-exec-6] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 555 +2025-10-29 10:27:15 [http-nio-8084-exec-6] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 555, size: 8236 bytes +2025-10-29 10:27:15 [http-nio-8084-exec-7] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 556 +2025-10-29 10:27:15 [http-nio-8084-exec-7] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 556, size: 8236 bytes +2025-10-29 10:27:15 [http-nio-8084-exec-8] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 557 +2025-10-29 10:27:15 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 557, size: 8236 bytes +2025-10-29 10:27:15 [http-nio-8084-exec-9] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 558 +2025-10-29 10:27:15 [http-nio-8084-exec-9] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 558, size: 8236 bytes +2025-10-29 10:27:16 [http-nio-8084-exec-10] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 559 +2025-10-29 10:27:16 [http-nio-8084-exec-10] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 559, size: 8236 bytes +2025-10-29 10:27:16 [http-nio-8084-exec-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 560 +2025-10-29 10:27:16 [http-nio-8084-exec-1] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 560, size: 8236 bytes +2025-10-29 10:27:16 [http-nio-8084-exec-2] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 561 +2025-10-29 10:27:16 [http-nio-8084-exec-2] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 561, size: 8236 bytes +2025-10-29 10:27:16 [http-nio-8084-exec-3] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 562 +2025-10-29 10:27:16 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 562, size: 8236 bytes +2025-10-29 10:27:17 [http-nio-8084-exec-4] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 563 +2025-10-29 10:27:17 [http-nio-8084-exec-4] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 563, size: 8236 bytes +2025-10-29 10:27:17 [http-nio-8084-exec-5] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 564 +2025-10-29 10:27:17 [http-nio-8084-exec-5] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 564, size: 8236 bytes +2025-10-29 10:27:17 [http-nio-8084-exec-6] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 565 +2025-10-29 10:27:17 [http-nio-8084-exec-6] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 565, size: 8236 bytes +2025-10-29 10:27:17 [http-nio-8084-exec-7] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 566 +2025-10-29 10:27:17 [http-nio-8084-exec-7] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 566, size: 8236 bytes +2025-10-29 10:27:18 [http-nio-8084-exec-8] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 567 +2025-10-29 10:27:18 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 567, size: 8236 bytes +2025-10-29 10:27:18 [http-nio-8084-exec-9] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 568 +2025-10-29 10:27:18 [http-nio-8084-exec-9] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 568, size: 8236 bytes +2025-10-29 10:27:18 [http-nio-8084-exec-10] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 569 +2025-10-29 10:27:18 [http-nio-8084-exec-10] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 569, size: 8236 bytes +2025-10-29 10:27:18 [http-nio-8084-exec-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 570 +2025-10-29 10:27:18 [http-nio-8084-exec-1] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 570, size: 8236 bytes +2025-10-29 10:27:19 [http-nio-8084-exec-2] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 571 +2025-10-29 10:27:19 [http-nio-8084-exec-2] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 571, size: 8236 bytes +2025-10-29 10:27:19 [http-nio-8084-exec-3] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 572 +2025-10-29 10:27:19 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 572, size: 8236 bytes +2025-10-29 10:27:19 [http-nio-8084-exec-4] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 573 +2025-10-29 10:27:19 [http-nio-8084-exec-4] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 573, size: 8236 bytes +2025-10-29 10:27:20 [http-nio-8084-exec-5] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 574 +2025-10-29 10:27:20 [http-nio-8084-exec-5] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 574, size: 8236 bytes +2025-10-29 10:27:20 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:27:20 [scheduling-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 조회 완료 - meetingId: test-meeting-001, count: 19 +2025-10-29 10:27:20 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 오디오 청크 조회 완료 - meetingId: test-meeting-001, chunks: 19개 +2025-10-29 10:27:20 [scheduling-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 병합 완료 - chunks: 19, totalSize: 156484 +2025-10-29 10:27:20 [scheduling-1] WARN c.u.h.stt.service.AzureSpeechService - Azure Speech Service 비활성화 - 시뮬레이션 결과 반환 +2025-10-29 10:27:20 [scheduling-1] INFO c.u.h.stt.service.AzureSpeechService - [시뮬레이션] 음성 인식 결과: 기술 스택 선정에 대한 의견을 나누고 있습니다. +2025-10-29 10:27:20 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - Event Hub 이벤트 발행 완료 - meetingId: test-meeting-001, text: 기술 스택 선정에 대한 의견을 나누고 있습니다. +2025-10-29 10:27:20 [ForkJoinPool.commonPool-worker-1] DEBUG c.u.h.s.e.p.EventHubPublisher - Event Hub 발행 시뮬레이션: +2025-10-29 10:27:20 [ForkJoinPool.commonPool-worker-1] DEBUG c.u.h.s.e.p.EventHubPublisher - Topic: transcription-events +2025-10-29 10:27:20 [ForkJoinPool.commonPool-worker-1] DEBUG c.u.h.s.e.p.EventHubPublisher - Event Data: {"eventId":"3ff8714b-48c0-45fc-8815-9ba82df8c4d7","eventType":"SegmentCreated","segmentId":"cb068d8f-056f-401e-b15d-b5e5bdc082bf","recordingId":"test-meeting-001","meetingId":"test-meeting-001","text":"기술 스택 선정에 대한 의견을 나누고 있습니다.","speakerId":"UNKNOWN","speakerName":"참석자","timestamp":[2025,10,29,10,27,20,243417000],"duration":5.0,"confidence":0.85,"warningFlag":false,"eventTime":[2025,10,29,10,27,20,243459000]} +2025-10-29 10:27:20 [ForkJoinPool.commonPool-worker-1] INFO c.u.h.s.e.p.EventHubPublisher - 이벤트 발행 완료 - topic: transcription-events, event: SegmentCreated +2025-10-29 10:27:20 [scheduling-1] INFO c.u.h.s.c.AudioWebSocketHandler - STT 결과 전송 완료 - meetingId: test-meeting-001, sessions: 1개, text: 기술 스택 선정에 대한 의견을 나누고 있습니다. +2025-10-29 10:27:20 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - WebSocket 결과 전송 완료 - meetingId: test-meeting-001, text: 기술 스택 선정에 대한 의견을 나누고 있습니다. +2025-10-29 10:27:20 [scheduling-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 삭제 완료 - meetingId: test-meeting-001 +2025-10-29 10:27:20 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 회의 처리 완료 - meetingId: test-meeting-001, text: 기술 스택 선정에 대한 의견을 나누고 있습니다. +2025-10-29 10:27:20 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:27:20 [http-nio-8084-exec-6] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 575 +2025-10-29 10:27:20 [http-nio-8084-exec-6] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 575, size: 8236 bytes +2025-10-29 10:27:20 [http-nio-8084-exec-7] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 576 +2025-10-29 10:27:20 [http-nio-8084-exec-7] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 576, size: 8236 bytes +2025-10-29 10:27:20 [http-nio-8084-exec-8] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 577 +2025-10-29 10:27:20 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 577, size: 8236 bytes +2025-10-29 10:27:21 [http-nio-8084-exec-9] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 578 +2025-10-29 10:27:21 [http-nio-8084-exec-9] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 578, size: 8236 bytes +2025-10-29 10:27:21 [http-nio-8084-exec-10] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 579 +2025-10-29 10:27:21 [http-nio-8084-exec-10] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 579, size: 8236 bytes +2025-10-29 10:27:21 [http-nio-8084-exec-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 580 +2025-10-29 10:27:21 [http-nio-8084-exec-1] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 580, size: 8236 bytes +2025-10-29 10:27:21 [http-nio-8084-exec-2] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 581 +2025-10-29 10:27:21 [http-nio-8084-exec-2] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 581, size: 8236 bytes +2025-10-29 10:27:22 [http-nio-8084-exec-3] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 582 +2025-10-29 10:27:22 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 582, size: 8236 bytes +2025-10-29 10:27:22 [http-nio-8084-exec-4] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 583 +2025-10-29 10:27:22 [http-nio-8084-exec-4] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 583, size: 8236 bytes +2025-10-29 10:27:22 [http-nio-8084-exec-5] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 584 +2025-10-29 10:27:22 [http-nio-8084-exec-5] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 584, size: 8236 bytes +2025-10-29 10:27:22 [http-nio-8084-exec-6] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 585 +2025-10-29 10:27:22 [http-nio-8084-exec-6] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 585, size: 8236 bytes +2025-10-29 10:27:23 [http-nio-8084-exec-7] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 586 +2025-10-29 10:27:23 [http-nio-8084-exec-7] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 586, size: 8236 bytes +2025-10-29 10:27:23 [http-nio-8084-exec-8] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 587 +2025-10-29 10:27:23 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 587, size: 8236 bytes +2025-10-29 10:27:23 [http-nio-8084-exec-9] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 588 +2025-10-29 10:27:23 [http-nio-8084-exec-9] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 588, size: 8236 bytes +2025-10-29 10:27:23 [http-nio-8084-exec-10] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 589 +2025-10-29 10:27:23 [http-nio-8084-exec-10] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 589, size: 8236 bytes +2025-10-29 10:27:24 [http-nio-8084-exec-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 590 +2025-10-29 10:27:24 [http-nio-8084-exec-1] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 590, size: 8236 bytes +2025-10-29 10:27:24 [http-nio-8084-exec-2] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 591 +2025-10-29 10:27:24 [http-nio-8084-exec-2] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 591, size: 8236 bytes +2025-10-29 10:27:24 [http-nio-8084-exec-3] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 592 +2025-10-29 10:27:24 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 592, size: 8236 bytes +2025-10-29 10:27:24 [http-nio-8084-exec-4] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 593 +2025-10-29 10:27:24 [http-nio-8084-exec-4] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 593, size: 8236 bytes +2025-10-29 10:27:25 [http-nio-8084-exec-5] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 594 +2025-10-29 10:27:25 [http-nio-8084-exec-5] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 594, size: 8236 bytes +2025-10-29 10:27:25 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:27:25 [scheduling-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 조회 완료 - meetingId: test-meeting-001, count: 19 +2025-10-29 10:27:25 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 오디오 청크 조회 완료 - meetingId: test-meeting-001, chunks: 19개 +2025-10-29 10:27:25 [scheduling-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 병합 완료 - chunks: 19, totalSize: 156484 +2025-10-29 10:27:25 [scheduling-1] WARN c.u.h.stt.service.AzureSpeechService - Azure Speech Service 비활성화 - 시뮬레이션 결과 반환 +2025-10-29 10:27:25 [scheduling-1] INFO c.u.h.stt.service.AzureSpeechService - [시뮬레이션] 음성 인식 결과: 마케팅 예산 배분 계획을 수립해야 합니다. +2025-10-29 10:27:25 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - Event Hub 이벤트 발행 완료 - meetingId: test-meeting-001, text: 마케팅 예산 배분 계획을 수립해야 합니다. +2025-10-29 10:27:25 [ForkJoinPool.commonPool-worker-1] DEBUG c.u.h.s.e.p.EventHubPublisher - Event Hub 발행 시뮬레이션: +2025-10-29 10:27:25 [ForkJoinPool.commonPool-worker-1] DEBUG c.u.h.s.e.p.EventHubPublisher - Topic: transcription-events +2025-10-29 10:27:25 [ForkJoinPool.commonPool-worker-1] DEBUG c.u.h.s.e.p.EventHubPublisher - Event Data: {"eventId":"c5e32d88-980a-4643-a350-9aba432a38ef","eventType":"SegmentCreated","segmentId":"cbeab05f-15d8-4de9-a204-922f77ef5ff1","recordingId":"test-meeting-001","meetingId":"test-meeting-001","text":"마케팅 예산 배분 계획을 수립해야 합니다.","speakerId":"UNKNOWN","speakerName":"참석자","timestamp":[2025,10,29,10,27,25,353759000],"duration":5.0,"confidence":0.85,"warningFlag":false,"eventTime":[2025,10,29,10,27,25,353795000]} +2025-10-29 10:27:25 [ForkJoinPool.commonPool-worker-1] INFO c.u.h.s.e.p.EventHubPublisher - 이벤트 발행 완료 - topic: transcription-events, event: SegmentCreated +2025-10-29 10:27:25 [scheduling-1] INFO c.u.h.s.c.AudioWebSocketHandler - STT 결과 전송 완료 - meetingId: test-meeting-001, sessions: 1개, text: 마케팅 예산 배분 계획을 수립해야 합니다. +2025-10-29 10:27:25 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - WebSocket 결과 전송 완료 - meetingId: test-meeting-001, text: 마케팅 예산 배분 계획을 수립해야 합니다. +2025-10-29 10:27:25 [scheduling-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 삭제 완료 - meetingId: test-meeting-001 +2025-10-29 10:27:25 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 회의 처리 완료 - meetingId: test-meeting-001, text: 마케팅 예산 배분 계획을 수립해야 합니다. +2025-10-29 10:27:25 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:27:25 [http-nio-8084-exec-6] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 595 +2025-10-29 10:27:25 [http-nio-8084-exec-6] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 595, size: 8236 bytes +2025-10-29 10:27:25 [http-nio-8084-exec-7] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 596 +2025-10-29 10:27:25 [http-nio-8084-exec-7] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 596, size: 8236 bytes +2025-10-29 10:27:25 [http-nio-8084-exec-8] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 597 +2025-10-29 10:27:25 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 597, size: 8236 bytes +2025-10-29 10:27:26 [http-nio-8084-exec-9] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 598 +2025-10-29 10:27:26 [http-nio-8084-exec-9] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 598, size: 8236 bytes +2025-10-29 10:27:26 [http-nio-8084-exec-10] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 599 +2025-10-29 10:27:26 [http-nio-8084-exec-10] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 599, size: 8236 bytes +2025-10-29 10:27:26 [http-nio-8084-exec-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 600 +2025-10-29 10:27:26 [http-nio-8084-exec-1] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 600, size: 8236 bytes +2025-10-29 10:27:26 [http-nio-8084-exec-2] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 601 +2025-10-29 10:27:26 [http-nio-8084-exec-2] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 601, size: 8236 bytes +2025-10-29 10:27:27 [http-nio-8084-exec-3] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 602 +2025-10-29 10:27:27 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 602, size: 8236 bytes +2025-10-29 10:27:27 [http-nio-8084-exec-4] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 603 +2025-10-29 10:27:27 [http-nio-8084-exec-4] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 603, size: 8236 bytes +2025-10-29 10:27:27 [http-nio-8084-exec-5] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 604 +2025-10-29 10:27:27 [http-nio-8084-exec-5] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 604, size: 8236 bytes +2025-10-29 10:27:27 [http-nio-8084-exec-6] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 605 +2025-10-29 10:27:27 [http-nio-8084-exec-6] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 605, size: 8236 bytes +2025-10-29 10:27:28 [http-nio-8084-exec-7] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 606 +2025-10-29 10:27:28 [http-nio-8084-exec-7] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 606, size: 8236 bytes +2025-10-29 10:27:28 [http-nio-8084-exec-8] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 607 +2025-10-29 10:27:28 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 607, size: 8236 bytes +2025-10-29 10:27:28 [http-nio-8084-exec-9] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 608 +2025-10-29 10:27:28 [http-nio-8084-exec-9] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 608, size: 8236 bytes +2025-10-29 10:27:28 [http-nio-8084-exec-10] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 609 +2025-10-29 10:27:28 [http-nio-8084-exec-10] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 609, size: 8236 bytes +2025-10-29 10:27:29 [http-nio-8084-exec-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 610 +2025-10-29 10:27:29 [http-nio-8084-exec-1] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 610, size: 8236 bytes +2025-10-29 10:27:29 [http-nio-8084-exec-2] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 611 +2025-10-29 10:27:29 [http-nio-8084-exec-2] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 611, size: 8236 bytes +2025-10-29 10:27:29 [http-nio-8084-exec-3] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 612 +2025-10-29 10:27:29 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 612, size: 8236 bytes +2025-10-29 10:27:29 [http-nio-8084-exec-4] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 613 +2025-10-29 10:27:29 [http-nio-8084-exec-4] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 613, size: 8236 bytes +2025-10-29 10:27:30 [http-nio-8084-exec-5] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 614 +2025-10-29 10:27:30 [http-nio-8084-exec-5] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 614, size: 8236 bytes +2025-10-29 10:27:30 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:27:30 [scheduling-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 조회 완료 - meetingId: test-meeting-001, count: 19 +2025-10-29 10:27:30 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 오디오 청크 조회 완료 - meetingId: test-meeting-001, chunks: 19개 +2025-10-29 10:27:30 [scheduling-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 병합 완료 - chunks: 19, totalSize: 156484 +2025-10-29 10:27:30 [scheduling-1] WARN c.u.h.stt.service.AzureSpeechService - Azure Speech Service 비활성화 - 시뮬레이션 결과 반환 +2025-10-29 10:27:30 [scheduling-1] INFO c.u.h.stt.service.AzureSpeechService - [시뮬레이션] 음성 인식 결과: 기술 스택 선정에 대한 의견을 나누고 있습니다. +2025-10-29 10:27:30 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - Event Hub 이벤트 발행 완료 - meetingId: test-meeting-001, text: 기술 스택 선정에 대한 의견을 나누고 있습니다. +2025-10-29 10:27:30 [ForkJoinPool.commonPool-worker-1] DEBUG c.u.h.s.e.p.EventHubPublisher - Event Hub 발행 시뮬레이션: +2025-10-29 10:27:30 [ForkJoinPool.commonPool-worker-1] DEBUG c.u.h.s.e.p.EventHubPublisher - Topic: transcription-events +2025-10-29 10:27:30 [ForkJoinPool.commonPool-worker-1] DEBUG c.u.h.s.e.p.EventHubPublisher - Event Data: {"eventId":"bd1d4bc2-7c42-45b8-861a-5ea8101cb890","eventType":"SegmentCreated","segmentId":"4acff7b5-2189-462c-a78f-7b3bc4825e4d","recordingId":"test-meeting-001","meetingId":"test-meeting-001","text":"기술 스택 선정에 대한 의견을 나누고 있습니다.","speakerId":"UNKNOWN","speakerName":"참석자","timestamp":[2025,10,29,10,27,30,460016000],"duration":5.0,"confidence":0.85,"warningFlag":false,"eventTime":[2025,10,29,10,27,30,460048000]} +2025-10-29 10:27:30 [ForkJoinPool.commonPool-worker-1] INFO c.u.h.s.e.p.EventHubPublisher - 이벤트 발행 완료 - topic: transcription-events, event: SegmentCreated +2025-10-29 10:27:30 [scheduling-1] INFO c.u.h.s.c.AudioWebSocketHandler - STT 결과 전송 완료 - meetingId: test-meeting-001, sessions: 1개, text: 기술 스택 선정에 대한 의견을 나누고 있습니다. +2025-10-29 10:27:30 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - WebSocket 결과 전송 완료 - meetingId: test-meeting-001, text: 기술 스택 선정에 대한 의견을 나누고 있습니다. +2025-10-29 10:27:30 [scheduling-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 삭제 완료 - meetingId: test-meeting-001 +2025-10-29 10:27:30 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 회의 처리 완료 - meetingId: test-meeting-001, text: 기술 스택 선정에 대한 의견을 나누고 있습니다. +2025-10-29 10:27:30 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:27:30 [http-nio-8084-exec-6] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 615 +2025-10-29 10:27:30 [http-nio-8084-exec-6] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 615, size: 8236 bytes +2025-10-29 10:27:30 [http-nio-8084-exec-7] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 616 +2025-10-29 10:27:30 [http-nio-8084-exec-7] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 616, size: 8236 bytes +2025-10-29 10:27:31 [http-nio-8084-exec-8] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 617 +2025-10-29 10:27:31 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 617, size: 8236 bytes +2025-10-29 10:27:31 [http-nio-8084-exec-9] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 618 +2025-10-29 10:27:31 [http-nio-8084-exec-9] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 618, size: 8236 bytes +2025-10-29 10:27:31 [http-nio-8084-exec-10] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 619 +2025-10-29 10:27:31 [http-nio-8084-exec-10] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 619, size: 8236 bytes +2025-10-29 10:27:31 [http-nio-8084-exec-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 620 +2025-10-29 10:27:31 [http-nio-8084-exec-1] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 620, size: 8236 bytes +2025-10-29 10:27:32 [http-nio-8084-exec-2] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 621 +2025-10-29 10:27:32 [http-nio-8084-exec-2] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 621, size: 8236 bytes +2025-10-29 10:27:32 [http-nio-8084-exec-3] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 622 +2025-10-29 10:27:32 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 622, size: 8236 bytes +2025-10-29 10:27:32 [http-nio-8084-exec-4] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 623 +2025-10-29 10:27:32 [http-nio-8084-exec-4] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 623, size: 8236 bytes +2025-10-29 10:27:32 [http-nio-8084-exec-5] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 624 +2025-10-29 10:27:32 [http-nio-8084-exec-5] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 624, size: 8236 bytes +2025-10-29 10:27:33 [http-nio-8084-exec-6] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 625 +2025-10-29 10:27:33 [http-nio-8084-exec-6] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 625, size: 8236 bytes +2025-10-29 10:27:33 [http-nio-8084-exec-7] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 626 +2025-10-29 10:27:33 [http-nio-8084-exec-7] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 626, size: 8236 bytes +2025-10-29 10:27:33 [http-nio-8084-exec-8] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 627 +2025-10-29 10:27:33 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 627, size: 8236 bytes +2025-10-29 10:27:33 [http-nio-8084-exec-9] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 628 +2025-10-29 10:27:33 [http-nio-8084-exec-9] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 628, size: 8236 bytes +2025-10-29 10:27:34 [http-nio-8084-exec-10] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 629 +2025-10-29 10:27:34 [http-nio-8084-exec-10] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 629, size: 8236 bytes +2025-10-29 10:27:34 [http-nio-8084-exec-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 630 +2025-10-29 10:27:34 [http-nio-8084-exec-1] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 630, size: 8236 bytes +2025-10-29 10:27:34 [http-nio-8084-exec-2] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 631 +2025-10-29 10:27:34 [http-nio-8084-exec-2] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 631, size: 8236 bytes +2025-10-29 10:27:34 [http-nio-8084-exec-3] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 632 +2025-10-29 10:27:34 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 632, size: 8236 bytes +2025-10-29 10:27:35 [http-nio-8084-exec-4] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 633 +2025-10-29 10:27:35 [http-nio-8084-exec-4] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 633, size: 8236 bytes +2025-10-29 10:27:35 [http-nio-8084-exec-5] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 634 +2025-10-29 10:27:35 [http-nio-8084-exec-5] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 634, size: 8236 bytes +2025-10-29 10:27:35 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:27:35 [scheduling-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 조회 완료 - meetingId: test-meeting-001, count: 20 +2025-10-29 10:27:35 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 오디오 청크 조회 완료 - meetingId: test-meeting-001, chunks: 20개 +2025-10-29 10:27:35 [scheduling-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 병합 완료 - chunks: 20, totalSize: 164720 +2025-10-29 10:27:35 [scheduling-1] WARN c.u.h.stt.service.AzureSpeechService - Azure Speech Service 비활성화 - 시뮬레이션 결과 반환 +2025-10-29 10:27:35 [scheduling-1] INFO c.u.h.stt.service.AzureSpeechService - [시뮬레이션] 음성 인식 결과: 다음 주까지 프로토타입을 완성하기로 했습니다. +2025-10-29 10:27:35 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - Event Hub 이벤트 발행 완료 - meetingId: test-meeting-001, text: 다음 주까지 프로토타입을 완성하기로 했습니다. +2025-10-29 10:27:35 [ForkJoinPool.commonPool-worker-1] DEBUG c.u.h.s.e.p.EventHubPublisher - Event Hub 발행 시뮬레이션: +2025-10-29 10:27:35 [ForkJoinPool.commonPool-worker-1] DEBUG c.u.h.s.e.p.EventHubPublisher - Topic: transcription-events +2025-10-29 10:27:35 [ForkJoinPool.commonPool-worker-1] DEBUG c.u.h.s.e.p.EventHubPublisher - Event Data: {"eventId":"19e26657-8077-4267-90d9-a611d8b843e5","eventType":"SegmentCreated","segmentId":"9996c520-2afe-44ce-96ca-9f3e872b6698","recordingId":"test-meeting-001","meetingId":"test-meeting-001","text":"다음 주까지 프로토타입을 완성하기로 했습니다.","speakerId":"UNKNOWN","speakerName":"참석자","timestamp":[2025,10,29,10,27,35,587498000],"duration":5.0,"confidence":0.85,"warningFlag":false,"eventTime":[2025,10,29,10,27,35,587525000]} +2025-10-29 10:27:35 [ForkJoinPool.commonPool-worker-1] INFO c.u.h.s.e.p.EventHubPublisher - 이벤트 발행 완료 - topic: transcription-events, event: SegmentCreated +2025-10-29 10:27:35 [scheduling-1] INFO c.u.h.s.c.AudioWebSocketHandler - STT 결과 전송 완료 - meetingId: test-meeting-001, sessions: 1개, text: 다음 주까지 프로토타입을 완성하기로 했습니다. +2025-10-29 10:27:35 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - WebSocket 결과 전송 완료 - meetingId: test-meeting-001, text: 다음 주까지 프로토타입을 완성하기로 했습니다. +2025-10-29 10:27:35 [scheduling-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 삭제 완료 - meetingId: test-meeting-001 +2025-10-29 10:27:35 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 회의 처리 완료 - meetingId: test-meeting-001, text: 다음 주까지 프로토타입을 완성하기로 했습니다. +2025-10-29 10:27:35 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:27:35 [http-nio-8084-exec-6] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 635 +2025-10-29 10:27:35 [http-nio-8084-exec-6] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 635, size: 8236 bytes +2025-10-29 10:27:35 [http-nio-8084-exec-7] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 636 +2025-10-29 10:27:35 [http-nio-8084-exec-7] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 636, size: 8236 bytes +2025-10-29 10:27:36 [http-nio-8084-exec-8] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 637 +2025-10-29 10:27:36 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 637, size: 8236 bytes +2025-10-29 10:27:36 [http-nio-8084-exec-9] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 638 +2025-10-29 10:27:36 [http-nio-8084-exec-9] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 638, size: 8236 bytes +2025-10-29 10:27:36 [http-nio-8084-exec-10] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 639 +2025-10-29 10:27:36 [http-nio-8084-exec-10] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 639, size: 8236 bytes +2025-10-29 10:27:36 [http-nio-8084-exec-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 640 +2025-10-29 10:27:36 [http-nio-8084-exec-1] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 640, size: 8236 bytes +2025-10-29 10:27:37 [http-nio-8084-exec-2] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 641 +2025-10-29 10:27:37 [http-nio-8084-exec-2] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 641, size: 8236 bytes +2025-10-29 10:27:37 [http-nio-8084-exec-3] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 642 +2025-10-29 10:27:37 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 642, size: 8236 bytes +2025-10-29 10:27:37 [http-nio-8084-exec-4] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 643 +2025-10-29 10:27:37 [http-nio-8084-exec-4] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 643, size: 8236 bytes +2025-10-29 10:27:37 [http-nio-8084-exec-5] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 644 +2025-10-29 10:27:37 [http-nio-8084-exec-5] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 644, size: 8236 bytes +2025-10-29 10:27:38 [http-nio-8084-exec-6] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 645 +2025-10-29 10:27:38 [http-nio-8084-exec-6] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 645, size: 8236 bytes +2025-10-29 10:27:38 [http-nio-8084-exec-7] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 646 +2025-10-29 10:27:38 [http-nio-8084-exec-7] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 646, size: 8236 bytes +2025-10-29 10:27:38 [http-nio-8084-exec-8] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 647 +2025-10-29 10:27:38 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 647, size: 8236 bytes +2025-10-29 10:27:38 [http-nio-8084-exec-9] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 648 +2025-10-29 10:27:38 [http-nio-8084-exec-9] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 648, size: 8236 bytes +2025-10-29 10:27:39 [http-nio-8084-exec-10] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 649 +2025-10-29 10:27:39 [http-nio-8084-exec-10] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 649, size: 8236 bytes +2025-10-29 10:27:39 [http-nio-8084-exec-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 650 +2025-10-29 10:27:39 [http-nio-8084-exec-1] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 650, size: 8236 bytes +2025-10-29 10:27:39 [http-nio-8084-exec-2] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 651 +2025-10-29 10:27:39 [http-nio-8084-exec-2] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 651, size: 8236 bytes +2025-10-29 10:27:39 [http-nio-8084-exec-3] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 652 +2025-10-29 10:27:39 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 652, size: 8236 bytes +2025-10-29 10:27:40 [http-nio-8084-exec-4] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 653 +2025-10-29 10:27:40 [http-nio-8084-exec-4] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 653, size: 8236 bytes +2025-10-29 10:27:40 [http-nio-8084-exec-5] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 654 +2025-10-29 10:27:40 [http-nio-8084-exec-5] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 654, size: 8236 bytes +2025-10-29 10:27:40 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:27:40 [scheduling-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 조회 완료 - meetingId: test-meeting-001, count: 20 +2025-10-29 10:27:40 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 오디오 청크 조회 완료 - meetingId: test-meeting-001, chunks: 20개 +2025-10-29 10:27:40 [scheduling-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 병합 완료 - chunks: 20, totalSize: 164720 +2025-10-29 10:27:40 [scheduling-1] WARN c.u.h.stt.service.AzureSpeechService - Azure Speech Service 비활성화 - 시뮬레이션 결과 반환 +2025-10-29 10:27:40 [scheduling-1] INFO c.u.h.stt.service.AzureSpeechService - [시뮬레이션] 음성 인식 결과: 프로젝트 일정 조정이 필요할 것 같습니다. +2025-10-29 10:27:40 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - Event Hub 이벤트 발행 완료 - meetingId: test-meeting-001, text: 프로젝트 일정 조정이 필요할 것 같습니다. +2025-10-29 10:27:40 [ForkJoinPool.commonPool-worker-1] DEBUG c.u.h.s.e.p.EventHubPublisher - Event Hub 발행 시뮬레이션: +2025-10-29 10:27:40 [ForkJoinPool.commonPool-worker-1] DEBUG c.u.h.s.e.p.EventHubPublisher - Topic: transcription-events +2025-10-29 10:27:40 [ForkJoinPool.commonPool-worker-1] DEBUG c.u.h.s.e.p.EventHubPublisher - Event Data: {"eventId":"694f8318-09ed-4273-965d-6c68ec7a7d6d","eventType":"SegmentCreated","segmentId":"027a38ba-496b-4c18-baa8-8a777e097ec0","recordingId":"test-meeting-001","meetingId":"test-meeting-001","text":"프로젝트 일정 조정이 필요할 것 같습니다.","speakerId":"UNKNOWN","speakerName":"참석자","timestamp":[2025,10,29,10,27,40,703506000],"duration":5.0,"confidence":0.85,"warningFlag":false,"eventTime":[2025,10,29,10,27,40,703520000]} +2025-10-29 10:27:40 [ForkJoinPool.commonPool-worker-1] INFO c.u.h.s.e.p.EventHubPublisher - 이벤트 발행 완료 - topic: transcription-events, event: SegmentCreated +2025-10-29 10:27:40 [scheduling-1] INFO c.u.h.s.c.AudioWebSocketHandler - STT 결과 전송 완료 - meetingId: test-meeting-001, sessions: 1개, text: 프로젝트 일정 조정이 필요할 것 같습니다. +2025-10-29 10:27:40 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - WebSocket 결과 전송 완료 - meetingId: test-meeting-001, text: 프로젝트 일정 조정이 필요할 것 같습니다. +2025-10-29 10:27:40 [scheduling-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 삭제 완료 - meetingId: test-meeting-001 +2025-10-29 10:27:40 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 회의 처리 완료 - meetingId: test-meeting-001, text: 프로젝트 일정 조정이 필요할 것 같습니다. +2025-10-29 10:27:40 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:27:40 [http-nio-8084-exec-6] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 655 +2025-10-29 10:27:40 [http-nio-8084-exec-6] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 655, size: 8236 bytes +2025-10-29 10:27:40 [http-nio-8084-exec-7] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 656 +2025-10-29 10:27:41 [http-nio-8084-exec-7] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 656, size: 8236 bytes +2025-10-29 10:27:41 [http-nio-8084-exec-8] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 657 +2025-10-29 10:27:41 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 657, size: 8236 bytes +2025-10-29 10:27:41 [http-nio-8084-exec-9] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 658 +2025-10-29 10:27:41 [http-nio-8084-exec-9] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 658, size: 8236 bytes +2025-10-29 10:27:41 [http-nio-8084-exec-10] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 659 +2025-10-29 10:27:41 [http-nio-8084-exec-10] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 659, size: 8236 bytes +2025-10-29 10:27:42 [http-nio-8084-exec-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 660 +2025-10-29 10:27:42 [http-nio-8084-exec-1] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 660, size: 8236 bytes +2025-10-29 10:27:42 [http-nio-8084-exec-2] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 661 +2025-10-29 10:27:42 [http-nio-8084-exec-2] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 661, size: 8236 bytes +2025-10-29 10:27:42 [http-nio-8084-exec-3] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 662 +2025-10-29 10:27:42 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 662, size: 8236 bytes +2025-10-29 10:27:42 [http-nio-8084-exec-4] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 663 +2025-10-29 10:27:42 [http-nio-8084-exec-4] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 663, size: 8236 bytes +2025-10-29 10:27:43 [http-nio-8084-exec-5] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 664 +2025-10-29 10:27:43 [http-nio-8084-exec-5] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 664, size: 8236 bytes +2025-10-29 10:27:43 [http-nio-8084-exec-6] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 665 +2025-10-29 10:27:43 [http-nio-8084-exec-6] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 665, size: 8236 bytes +2025-10-29 10:27:43 [http-nio-8084-exec-7] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 666 +2025-10-29 10:27:43 [http-nio-8084-exec-7] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 666, size: 8236 bytes +2025-10-29 10:27:43 [http-nio-8084-exec-8] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 667 +2025-10-29 10:27:43 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 667, size: 8236 bytes +2025-10-29 10:27:44 [http-nio-8084-exec-9] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 668 +2025-10-29 10:27:44 [http-nio-8084-exec-9] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 668, size: 8236 bytes +2025-10-29 10:27:44 [http-nio-8084-exec-10] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 669 +2025-10-29 10:27:44 [http-nio-8084-exec-10] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 669, size: 8236 bytes +2025-10-29 10:27:44 [http-nio-8084-exec-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 670 +2025-10-29 10:27:44 [http-nio-8084-exec-1] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 670, size: 8236 bytes +2025-10-29 10:27:44 [http-nio-8084-exec-2] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 671 +2025-10-29 10:27:44 [http-nio-8084-exec-2] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 671, size: 8236 bytes +2025-10-29 10:27:45 [http-nio-8084-exec-3] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 672 +2025-10-29 10:27:45 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 672, size: 8236 bytes +2025-10-29 10:27:45 [http-nio-8084-exec-4] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 673 +2025-10-29 10:27:45 [http-nio-8084-exec-4] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 673, size: 8236 bytes +2025-10-29 10:27:45 [http-nio-8084-exec-5] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 674 +2025-10-29 10:27:45 [http-nio-8084-exec-5] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 674, size: 8236 bytes +2025-10-29 10:27:45 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:27:45 [scheduling-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 조회 완료 - meetingId: test-meeting-001, count: 20 +2025-10-29 10:27:45 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 오디오 청크 조회 완료 - meetingId: test-meeting-001, chunks: 20개 +2025-10-29 10:27:45 [scheduling-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 병합 완료 - chunks: 20, totalSize: 164720 +2025-10-29 10:27:45 [scheduling-1] WARN c.u.h.stt.service.AzureSpeechService - Azure Speech Service 비활성화 - 시뮬레이션 결과 반환 +2025-10-29 10:27:45 [scheduling-1] INFO c.u.h.stt.service.AzureSpeechService - [시뮬레이션] 음성 인식 결과: 기술 스택 선정에 대한 의견을 나누고 있습니다. +2025-10-29 10:27:45 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - Event Hub 이벤트 발행 완료 - meetingId: test-meeting-001, text: 기술 스택 선정에 대한 의견을 나누고 있습니다. +2025-10-29 10:27:45 [ForkJoinPool.commonPool-worker-1] DEBUG c.u.h.s.e.p.EventHubPublisher - Event Hub 발행 시뮬레이션: +2025-10-29 10:27:45 [ForkJoinPool.commonPool-worker-1] DEBUG c.u.h.s.e.p.EventHubPublisher - Topic: transcription-events +2025-10-29 10:27:45 [ForkJoinPool.commonPool-worker-1] DEBUG c.u.h.s.e.p.EventHubPublisher - Event Data: {"eventId":"4d6b5906-3421-482c-a591-c8319dd9be8c","eventType":"SegmentCreated","segmentId":"70557142-6075-42e3-8cf0-ea7494c076d7","recordingId":"test-meeting-001","meetingId":"test-meeting-001","text":"기술 스택 선정에 대한 의견을 나누고 있습니다.","speakerId":"UNKNOWN","speakerName":"참석자","timestamp":[2025,10,29,10,27,45,805521000],"duration":5.0,"confidence":0.85,"warningFlag":false,"eventTime":[2025,10,29,10,27,45,805558000]} +2025-10-29 10:27:45 [ForkJoinPool.commonPool-worker-1] INFO c.u.h.s.e.p.EventHubPublisher - 이벤트 발행 완료 - topic: transcription-events, event: SegmentCreated +2025-10-29 10:27:45 [scheduling-1] INFO c.u.h.s.c.AudioWebSocketHandler - STT 결과 전송 완료 - meetingId: test-meeting-001, sessions: 1개, text: 기술 스택 선정에 대한 의견을 나누고 있습니다. +2025-10-29 10:27:45 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - WebSocket 결과 전송 완료 - meetingId: test-meeting-001, text: 기술 스택 선정에 대한 의견을 나누고 있습니다. +2025-10-29 10:27:45 [scheduling-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 삭제 완료 - meetingId: test-meeting-001 +2025-10-29 10:27:45 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 회의 처리 완료 - meetingId: test-meeting-001, text: 기술 스택 선정에 대한 의견을 나누고 있습니다. +2025-10-29 10:27:45 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:27:45 [http-nio-8084-exec-6] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 675 +2025-10-29 10:27:45 [http-nio-8084-exec-6] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 675, size: 8236 bytes +2025-10-29 10:27:46 [http-nio-8084-exec-7] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 676 +2025-10-29 10:27:46 [http-nio-8084-exec-7] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 676, size: 8236 bytes +2025-10-29 10:27:46 [http-nio-8084-exec-8] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 677 +2025-10-29 10:27:46 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 677, size: 8236 bytes +2025-10-29 10:27:46 [http-nio-8084-exec-9] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 678 +2025-10-29 10:27:46 [http-nio-8084-exec-9] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 678, size: 8236 bytes +2025-10-29 10:27:46 [http-nio-8084-exec-10] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 679 +2025-10-29 10:27:46 [http-nio-8084-exec-10] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 679, size: 8236 bytes +2025-10-29 10:27:47 [http-nio-8084-exec-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 680 +2025-10-29 10:27:47 [http-nio-8084-exec-1] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 680, size: 8236 bytes +2025-10-29 10:27:47 [http-nio-8084-exec-2] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 681 +2025-10-29 10:27:47 [http-nio-8084-exec-2] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 681, size: 8236 bytes +2025-10-29 10:27:47 [http-nio-8084-exec-3] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 682 +2025-10-29 10:27:47 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 682, size: 8236 bytes +2025-10-29 10:27:47 [http-nio-8084-exec-4] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 683 +2025-10-29 10:27:47 [http-nio-8084-exec-4] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 683, size: 8236 bytes +2025-10-29 10:27:48 [http-nio-8084-exec-5] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 684 +2025-10-29 10:27:48 [http-nio-8084-exec-5] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 684, size: 8236 bytes +2025-10-29 10:27:48 [http-nio-8084-exec-6] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 685 +2025-10-29 10:27:48 [http-nio-8084-exec-6] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 685, size: 8236 bytes +2025-10-29 10:27:48 [http-nio-8084-exec-7] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 686 +2025-10-29 10:27:48 [http-nio-8084-exec-7] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 686, size: 8236 bytes +2025-10-29 10:27:48 [http-nio-8084-exec-8] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 687 +2025-10-29 10:27:48 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 687, size: 8236 bytes +2025-10-29 10:27:49 [http-nio-8084-exec-9] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 688 +2025-10-29 10:27:49 [http-nio-8084-exec-9] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 688, size: 8236 bytes +2025-10-29 10:27:49 [http-nio-8084-exec-10] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 689 +2025-10-29 10:27:49 [http-nio-8084-exec-10] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 689, size: 8236 bytes +2025-10-29 10:27:49 [http-nio-8084-exec-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 690 +2025-10-29 10:27:49 [http-nio-8084-exec-1] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 690, size: 8236 bytes +2025-10-29 10:27:49 [http-nio-8084-exec-2] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 691 +2025-10-29 10:27:49 [http-nio-8084-exec-2] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 691, size: 8236 bytes +2025-10-29 10:27:50 [http-nio-8084-exec-3] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 692 +2025-10-29 10:27:50 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 692, size: 8236 bytes +2025-10-29 10:27:50 [http-nio-8084-exec-4] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 693 +2025-10-29 10:27:50 [http-nio-8084-exec-4] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 693, size: 8236 bytes +2025-10-29 10:27:50 [http-nio-8084-exec-5] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 694 +2025-10-29 10:27:50 [http-nio-8084-exec-5] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 694, size: 8236 bytes +2025-10-29 10:27:50 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:27:50 [scheduling-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 조회 완료 - meetingId: test-meeting-001, count: 20 +2025-10-29 10:27:50 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 오디오 청크 조회 완료 - meetingId: test-meeting-001, chunks: 20개 +2025-10-29 10:27:50 [scheduling-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 병합 완료 - chunks: 20, totalSize: 164720 +2025-10-29 10:27:50 [scheduling-1] WARN c.u.h.stt.service.AzureSpeechService - Azure Speech Service 비활성화 - 시뮬레이션 결과 반환 +2025-10-29 10:27:50 [scheduling-1] INFO c.u.h.stt.service.AzureSpeechService - [시뮬레이션] 음성 인식 결과: 다음 주까지 프로토타입을 완성하기로 했습니다. +2025-10-29 10:27:50 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - Event Hub 이벤트 발행 완료 - meetingId: test-meeting-001, text: 다음 주까지 프로토타입을 완성하기로 했습니다. +2025-10-29 10:27:50 [ForkJoinPool.commonPool-worker-1] DEBUG c.u.h.s.e.p.EventHubPublisher - Event Hub 발행 시뮬레이션: +2025-10-29 10:27:50 [ForkJoinPool.commonPool-worker-1] DEBUG c.u.h.s.e.p.EventHubPublisher - Topic: transcription-events +2025-10-29 10:27:50 [ForkJoinPool.commonPool-worker-1] DEBUG c.u.h.s.e.p.EventHubPublisher - Event Data: {"eventId":"7d3be650-bcdb-41f8-aa46-5dc4cafc482c","eventType":"SegmentCreated","segmentId":"e9e3516c-5a08-4b8f-9fbd-3dfdbf2edfe9","recordingId":"test-meeting-001","meetingId":"test-meeting-001","text":"다음 주까지 프로토타입을 완성하기로 했습니다.","speakerId":"UNKNOWN","speakerName":"참석자","timestamp":[2025,10,29,10,27,50,985466000],"duration":5.0,"confidence":0.85,"warningFlag":false,"eventTime":[2025,10,29,10,27,50,985497000]} +2025-10-29 10:27:50 [ForkJoinPool.commonPool-worker-1] INFO c.u.h.s.e.p.EventHubPublisher - 이벤트 발행 완료 - topic: transcription-events, event: SegmentCreated +2025-10-29 10:27:50 [scheduling-1] INFO c.u.h.s.c.AudioWebSocketHandler - STT 결과 전송 완료 - meetingId: test-meeting-001, sessions: 1개, text: 다음 주까지 프로토타입을 완성하기로 했습니다. +2025-10-29 10:27:50 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - WebSocket 결과 전송 완료 - meetingId: test-meeting-001, text: 다음 주까지 프로토타입을 완성하기로 했습니다. +2025-10-29 10:27:51 [scheduling-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 삭제 완료 - meetingId: test-meeting-001 +2025-10-29 10:27:51 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 회의 처리 완료 - meetingId: test-meeting-001, text: 다음 주까지 프로토타입을 완성하기로 했습니다. +2025-10-29 10:27:51 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:27:51 [http-nio-8084-exec-6] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 695 +2025-10-29 10:27:51 [http-nio-8084-exec-6] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 695, size: 8236 bytes +2025-10-29 10:27:51 [http-nio-8084-exec-7] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 696 +2025-10-29 10:27:51 [http-nio-8084-exec-7] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 696, size: 8236 bytes +2025-10-29 10:27:51 [http-nio-8084-exec-8] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 697 +2025-10-29 10:27:51 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 697, size: 8236 bytes +2025-10-29 10:27:51 [http-nio-8084-exec-9] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 698 +2025-10-29 10:27:51 [http-nio-8084-exec-9] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 698, size: 8236 bytes +2025-10-29 10:27:52 [http-nio-8084-exec-10] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 699 +2025-10-29 10:27:52 [http-nio-8084-exec-10] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 699, size: 8236 bytes +2025-10-29 10:27:52 [http-nio-8084-exec-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 700 +2025-10-29 10:27:52 [http-nio-8084-exec-1] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 700, size: 8236 bytes +2025-10-29 10:27:52 [http-nio-8084-exec-2] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 701 +2025-10-29 10:27:52 [http-nio-8084-exec-2] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 701, size: 8236 bytes +2025-10-29 10:27:52 [http-nio-8084-exec-3] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 702 +2025-10-29 10:27:52 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 702, size: 8236 bytes +2025-10-29 10:27:53 [http-nio-8084-exec-4] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 703 +2025-10-29 10:27:53 [http-nio-8084-exec-4] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 703, size: 8236 bytes +2025-10-29 10:27:53 [http-nio-8084-exec-5] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 704 +2025-10-29 10:27:53 [http-nio-8084-exec-5] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 704, size: 8236 bytes +2025-10-29 10:27:53 [http-nio-8084-exec-6] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 705 +2025-10-29 10:27:53 [http-nio-8084-exec-6] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 705, size: 8236 bytes +2025-10-29 10:27:53 [http-nio-8084-exec-7] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 706 +2025-10-29 10:27:53 [http-nio-8084-exec-7] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 706, size: 8236 bytes +2025-10-29 10:27:54 [http-nio-8084-exec-8] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 707 +2025-10-29 10:27:54 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 707, size: 8236 bytes +2025-10-29 10:27:54 [http-nio-8084-exec-9] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 708 +2025-10-29 10:27:54 [http-nio-8084-exec-9] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 708, size: 8236 bytes +2025-10-29 10:27:54 [http-nio-8084-exec-10] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 709 +2025-10-29 10:27:54 [http-nio-8084-exec-10] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 709, size: 8236 bytes +2025-10-29 10:27:54 [http-nio-8084-exec-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 710 +2025-10-29 10:27:54 [http-nio-8084-exec-1] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 710, size: 8236 bytes +2025-10-29 10:27:55 [http-nio-8084-exec-2] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 711 +2025-10-29 10:27:55 [http-nio-8084-exec-2] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 711, size: 8236 bytes +2025-10-29 10:27:55 [http-nio-8084-exec-3] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 712 +2025-10-29 10:27:55 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 712, size: 8236 bytes +2025-10-29 10:27:55 [http-nio-8084-exec-4] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 713 +2025-10-29 10:27:55 [http-nio-8084-exec-4] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 713, size: 8236 bytes +2025-10-29 10:27:55 [http-nio-8084-exec-5] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 714 +2025-10-29 10:27:55 [http-nio-8084-exec-5] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 714, size: 8236 bytes +2025-10-29 10:27:56 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:27:56 [scheduling-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 조회 완료 - meetingId: test-meeting-001, count: 19 +2025-10-29 10:27:56 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 오디오 청크 조회 완료 - meetingId: test-meeting-001, chunks: 19개 +2025-10-29 10:27:56 [scheduling-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 병합 완료 - chunks: 19, totalSize: 156484 +2025-10-29 10:27:56 [scheduling-1] WARN c.u.h.stt.service.AzureSpeechService - Azure Speech Service 비활성화 - 시뮬레이션 결과 반환 +2025-10-29 10:27:56 [scheduling-1] INFO c.u.h.stt.service.AzureSpeechService - [시뮬레이션] 음성 인식 결과: 신제품 개발 일정에 대해 논의하고 있습니다. +2025-10-29 10:27:56 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - Event Hub 이벤트 발행 완료 - meetingId: test-meeting-001, text: 신제품 개발 일정에 대해 논의하고 있습니다. +2025-10-29 10:27:56 [ForkJoinPool.commonPool-worker-1] DEBUG c.u.h.s.e.p.EventHubPublisher - Event Hub 발행 시뮬레이션: +2025-10-29 10:27:56 [ForkJoinPool.commonPool-worker-1] DEBUG c.u.h.s.e.p.EventHubPublisher - Topic: transcription-events +2025-10-29 10:27:56 [ForkJoinPool.commonPool-worker-1] DEBUG c.u.h.s.e.p.EventHubPublisher - Event Data: {"eventId":"4870c4c2-2a12-483d-9b62-3f212edf50b0","eventType":"SegmentCreated","segmentId":"9f9e1270-f759-4153-a94f-c1967a9f8dc3","recordingId":"test-meeting-001","meetingId":"test-meeting-001","text":"신제품 개발 일정에 대해 논의하고 있습니다.","speakerId":"UNKNOWN","speakerName":"참석자","timestamp":[2025,10,29,10,27,56,77872000],"duration":5.0,"confidence":0.85,"warningFlag":false,"eventTime":[2025,10,29,10,27,56,77911000]} +2025-10-29 10:27:56 [ForkJoinPool.commonPool-worker-1] INFO c.u.h.s.e.p.EventHubPublisher - 이벤트 발행 완료 - topic: transcription-events, event: SegmentCreated +2025-10-29 10:27:56 [scheduling-1] INFO c.u.h.s.c.AudioWebSocketHandler - STT 결과 전송 완료 - meetingId: test-meeting-001, sessions: 1개, text: 신제품 개발 일정에 대해 논의하고 있습니다. +2025-10-29 10:27:56 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - WebSocket 결과 전송 완료 - meetingId: test-meeting-001, text: 신제품 개발 일정에 대해 논의하고 있습니다. +2025-10-29 10:27:56 [scheduling-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 삭제 완료 - meetingId: test-meeting-001 +2025-10-29 10:27:56 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 회의 처리 완료 - meetingId: test-meeting-001, text: 신제품 개발 일정에 대해 논의하고 있습니다. +2025-10-29 10:27:56 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:27:56 [http-nio-8084-exec-6] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 715 +2025-10-29 10:27:56 [http-nio-8084-exec-6] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 715, size: 8236 bytes +2025-10-29 10:27:56 [http-nio-8084-exec-7] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 716 +2025-10-29 10:27:56 [http-nio-8084-exec-7] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 716, size: 8236 bytes +2025-10-29 10:27:56 [http-nio-8084-exec-8] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 717 +2025-10-29 10:27:56 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 717, size: 8236 bytes +2025-10-29 10:27:56 [http-nio-8084-exec-9] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 718 +2025-10-29 10:27:56 [http-nio-8084-exec-9] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 718, size: 8236 bytes +2025-10-29 10:27:57 [http-nio-8084-exec-10] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 719 +2025-10-29 10:27:57 [http-nio-8084-exec-10] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 719, size: 8236 bytes +2025-10-29 10:27:57 [http-nio-8084-exec-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 720 +2025-10-29 10:27:57 [http-nio-8084-exec-1] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 720, size: 8236 bytes +2025-10-29 10:27:57 [http-nio-8084-exec-2] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 721 +2025-10-29 10:27:57 [http-nio-8084-exec-2] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 721, size: 8236 bytes +2025-10-29 10:27:57 [http-nio-8084-exec-3] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 722 +2025-10-29 10:27:57 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 722, size: 8236 bytes +2025-10-29 10:27:58 [http-nio-8084-exec-4] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 723 +2025-10-29 10:27:58 [http-nio-8084-exec-4] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 723, size: 8236 bytes +2025-10-29 10:27:58 [http-nio-8084-exec-5] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 724 +2025-10-29 10:27:58 [http-nio-8084-exec-5] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 724, size: 8236 bytes +2025-10-29 10:27:58 [http-nio-8084-exec-6] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 725 +2025-10-29 10:27:58 [http-nio-8084-exec-6] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 725, size: 8236 bytes +2025-10-29 10:27:58 [http-nio-8084-exec-7] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 726 +2025-10-29 10:27:58 [http-nio-8084-exec-7] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 726, size: 8236 bytes +2025-10-29 10:27:59 [http-nio-8084-exec-8] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 727 +2025-10-29 10:27:59 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 727, size: 8236 bytes +2025-10-29 10:27:59 [http-nio-8084-exec-9] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 728 +2025-10-29 10:27:59 [http-nio-8084-exec-9] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 728, size: 8236 bytes +2025-10-29 10:27:59 [http-nio-8084-exec-10] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 729 +2025-10-29 10:27:59 [http-nio-8084-exec-10] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 729, size: 8236 bytes +2025-10-29 10:27:59 [http-nio-8084-exec-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 730 +2025-10-29 10:27:59 [http-nio-8084-exec-1] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 730, size: 8236 bytes +2025-10-29 10:28:00 [http-nio-8084-exec-2] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 731 +2025-10-29 10:28:00 [http-nio-8084-exec-2] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 731, size: 8236 bytes +2025-10-29 10:28:00 [http-nio-8084-exec-3] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 732 +2025-10-29 10:28:00 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 732, size: 8236 bytes +2025-10-29 10:28:00 [http-nio-8084-exec-4] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 733 +2025-10-29 10:28:00 [http-nio-8084-exec-4] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 733, size: 8236 bytes +2025-10-29 10:28:00 [http-nio-8084-exec-5] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 734 +2025-10-29 10:28:00 [http-nio-8084-exec-5] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 734, size: 8236 bytes +2025-10-29 10:28:01 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:28:01 [scheduling-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 조회 완료 - meetingId: test-meeting-001, count: 19 +2025-10-29 10:28:01 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 오디오 청크 조회 완료 - meetingId: test-meeting-001, chunks: 19개 +2025-10-29 10:28:01 [scheduling-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 병합 완료 - chunks: 19, totalSize: 156484 +2025-10-29 10:28:01 [scheduling-1] WARN c.u.h.stt.service.AzureSpeechService - Azure Speech Service 비활성화 - 시뮬레이션 결과 반환 +2025-10-29 10:28:01 [scheduling-1] INFO c.u.h.stt.service.AzureSpeechService - [시뮬레이션] 음성 인식 결과: 기술 스택 선정에 대한 의견을 나누고 있습니다. +2025-10-29 10:28:01 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - Event Hub 이벤트 발행 완료 - meetingId: test-meeting-001, text: 기술 스택 선정에 대한 의견을 나누고 있습니다. +2025-10-29 10:28:01 [ForkJoinPool.commonPool-worker-1] DEBUG c.u.h.s.e.p.EventHubPublisher - Event Hub 발행 시뮬레이션: +2025-10-29 10:28:01 [ForkJoinPool.commonPool-worker-1] DEBUG c.u.h.s.e.p.EventHubPublisher - Topic: transcription-events +2025-10-29 10:28:01 [ForkJoinPool.commonPool-worker-1] DEBUG c.u.h.s.e.p.EventHubPublisher - Event Data: {"eventId":"b61e0414-8e6e-4c79-b792-9db07ad9b919","eventType":"SegmentCreated","segmentId":"c810b056-079e-4e8b-9128-251c6fbb2dba","recordingId":"test-meeting-001","meetingId":"test-meeting-001","text":"기술 스택 선정에 대한 의견을 나누고 있습니다.","speakerId":"UNKNOWN","speakerName":"참석자","timestamp":[2025,10,29,10,28,1,172374000],"duration":5.0,"confidence":0.85,"warningFlag":false,"eventTime":[2025,10,29,10,28,1,172401000]} +2025-10-29 10:28:01 [ForkJoinPool.commonPool-worker-1] INFO c.u.h.s.e.p.EventHubPublisher - 이벤트 발행 완료 - topic: transcription-events, event: SegmentCreated +2025-10-29 10:28:01 [scheduling-1] INFO c.u.h.s.c.AudioWebSocketHandler - STT 결과 전송 완료 - meetingId: test-meeting-001, sessions: 1개, text: 기술 스택 선정에 대한 의견을 나누고 있습니다. +2025-10-29 10:28:01 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - WebSocket 결과 전송 완료 - meetingId: test-meeting-001, text: 기술 스택 선정에 대한 의견을 나누고 있습니다. +2025-10-29 10:28:01 [scheduling-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 삭제 완료 - meetingId: test-meeting-001 +2025-10-29 10:28:01 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 회의 처리 완료 - meetingId: test-meeting-001, text: 기술 스택 선정에 대한 의견을 나누고 있습니다. +2025-10-29 10:28:01 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:28:01 [http-nio-8084-exec-6] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 735 +2025-10-29 10:28:01 [http-nio-8084-exec-6] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 735, size: 8236 bytes +2025-10-29 10:28:01 [http-nio-8084-exec-7] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 736 +2025-10-29 10:28:01 [http-nio-8084-exec-7] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 736, size: 8236 bytes +2025-10-29 10:28:01 [http-nio-8084-exec-8] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 737 +2025-10-29 10:28:01 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 737, size: 8236 bytes +2025-10-29 10:28:02 [http-nio-8084-exec-9] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 738 +2025-10-29 10:28:02 [http-nio-8084-exec-9] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 738, size: 8236 bytes +2025-10-29 10:28:02 [http-nio-8084-exec-10] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 739 +2025-10-29 10:28:02 [http-nio-8084-exec-10] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 739, size: 8236 bytes +2025-10-29 10:28:02 [http-nio-8084-exec-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 740 +2025-10-29 10:28:02 [http-nio-8084-exec-1] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 740, size: 8236 bytes +2025-10-29 10:28:02 [http-nio-8084-exec-2] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 741 +2025-10-29 10:28:02 [http-nio-8084-exec-2] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 741, size: 8236 bytes +2025-10-29 10:28:03 [http-nio-8084-exec-3] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 742 +2025-10-29 10:28:03 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 742, size: 8236 bytes +2025-10-29 10:28:03 [http-nio-8084-exec-4] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 743 +2025-10-29 10:28:03 [http-nio-8084-exec-4] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 743, size: 8236 bytes +2025-10-29 10:28:03 [http-nio-8084-exec-5] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 744 +2025-10-29 10:28:03 [http-nio-8084-exec-5] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 744, size: 8236 bytes +2025-10-29 10:28:03 [http-nio-8084-exec-6] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 745 +2025-10-29 10:28:03 [http-nio-8084-exec-6] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 745, size: 8236 bytes +2025-10-29 10:28:04 [http-nio-8084-exec-7] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 746 +2025-10-29 10:28:04 [http-nio-8084-exec-7] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 746, size: 8236 bytes +2025-10-29 10:28:04 [http-nio-8084-exec-8] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 747 +2025-10-29 10:28:04 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 747, size: 8236 bytes +2025-10-29 10:28:04 [http-nio-8084-exec-9] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 748 +2025-10-29 10:28:04 [http-nio-8084-exec-9] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 748, size: 8236 bytes +2025-10-29 10:28:04 [http-nio-8084-exec-10] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 749 +2025-10-29 10:28:04 [http-nio-8084-exec-10] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 749, size: 8236 bytes +2025-10-29 10:28:05 [http-nio-8084-exec-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 750 +2025-10-29 10:28:05 [http-nio-8084-exec-1] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 750, size: 8236 bytes +2025-10-29 10:28:05 [http-nio-8084-exec-2] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 751 +2025-10-29 10:28:05 [http-nio-8084-exec-2] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 751, size: 8236 bytes +2025-10-29 10:28:05 [http-nio-8084-exec-3] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 752 +2025-10-29 10:28:05 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 752, size: 8236 bytes +2025-10-29 10:28:05 [http-nio-8084-exec-4] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 753 +2025-10-29 10:28:05 [http-nio-8084-exec-4] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 753, size: 8236 bytes +2025-10-29 10:28:06 [http-nio-8084-exec-5] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 754 +2025-10-29 10:28:06 [http-nio-8084-exec-5] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 754, size: 8236 bytes +2025-10-29 10:28:06 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:28:06 [scheduling-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 조회 완료 - meetingId: test-meeting-001, count: 20 +2025-10-29 10:28:06 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 오디오 청크 조회 완료 - meetingId: test-meeting-001, chunks: 20개 +2025-10-29 10:28:06 [scheduling-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 병합 완료 - chunks: 20, totalSize: 164720 +2025-10-29 10:28:06 [scheduling-1] WARN c.u.h.stt.service.AzureSpeechService - Azure Speech Service 비활성화 - 시뮬레이션 결과 반환 +2025-10-29 10:28:06 [scheduling-1] INFO c.u.h.stt.service.AzureSpeechService - [시뮬레이션] 음성 인식 결과: 프로젝트 일정 조정이 필요할 것 같습니다. +2025-10-29 10:28:06 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - Event Hub 이벤트 발행 완료 - meetingId: test-meeting-001, text: 프로젝트 일정 조정이 필요할 것 같습니다. +2025-10-29 10:28:06 [ForkJoinPool.commonPool-worker-1] DEBUG c.u.h.s.e.p.EventHubPublisher - Event Hub 발행 시뮬레이션: +2025-10-29 10:28:06 [ForkJoinPool.commonPool-worker-1] DEBUG c.u.h.s.e.p.EventHubPublisher - Topic: transcription-events +2025-10-29 10:28:06 [ForkJoinPool.commonPool-worker-1] DEBUG c.u.h.s.e.p.EventHubPublisher - Event Data: {"eventId":"51377c02-0190-4892-b41b-16a3fda2ba6b","eventType":"SegmentCreated","segmentId":"72721357-7e44-4e7f-9abf-b5bf5a957a12","recordingId":"test-meeting-001","meetingId":"test-meeting-001","text":"프로젝트 일정 조정이 필요할 것 같습니다.","speakerId":"UNKNOWN","speakerName":"참석자","timestamp":[2025,10,29,10,28,6,253696000],"duration":5.0,"confidence":0.85,"warningFlag":false,"eventTime":[2025,10,29,10,28,6,253708000]} +2025-10-29 10:28:06 [ForkJoinPool.commonPool-worker-1] INFO c.u.h.s.e.p.EventHubPublisher - 이벤트 발행 완료 - topic: transcription-events, event: SegmentCreated +2025-10-29 10:28:06 [scheduling-1] INFO c.u.h.s.c.AudioWebSocketHandler - STT 결과 전송 완료 - meetingId: test-meeting-001, sessions: 1개, text: 프로젝트 일정 조정이 필요할 것 같습니다. +2025-10-29 10:28:06 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - WebSocket 결과 전송 완료 - meetingId: test-meeting-001, text: 프로젝트 일정 조정이 필요할 것 같습니다. +2025-10-29 10:28:06 [scheduling-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 삭제 완료 - meetingId: test-meeting-001 +2025-10-29 10:28:06 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 회의 처리 완료 - meetingId: test-meeting-001, text: 프로젝트 일정 조정이 필요할 것 같습니다. +2025-10-29 10:28:06 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:28:06 [http-nio-8084-exec-6] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 755 +2025-10-29 10:28:06 [http-nio-8084-exec-6] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 755, size: 8236 bytes +2025-10-29 10:28:06 [http-nio-8084-exec-7] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 756 +2025-10-29 10:28:06 [http-nio-8084-exec-7] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 756, size: 8236 bytes +2025-10-29 10:28:06 [http-nio-8084-exec-8] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 757 +2025-10-29 10:28:06 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 757, size: 8236 bytes +2025-10-29 10:28:07 [http-nio-8084-exec-9] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 758 +2025-10-29 10:28:07 [http-nio-8084-exec-9] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 758, size: 8236 bytes +2025-10-29 10:28:07 [http-nio-8084-exec-10] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 759 +2025-10-29 10:28:07 [http-nio-8084-exec-10] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 759, size: 8236 bytes +2025-10-29 10:28:07 [http-nio-8084-exec-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 760 +2025-10-29 10:28:07 [http-nio-8084-exec-1] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 760, size: 8236 bytes +2025-10-29 10:28:07 [http-nio-8084-exec-2] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 761 +2025-10-29 10:28:07 [http-nio-8084-exec-2] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 761, size: 8236 bytes +2025-10-29 10:28:08 [http-nio-8084-exec-3] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 762 +2025-10-29 10:28:08 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 762, size: 8236 bytes +2025-10-29 10:28:08 [http-nio-8084-exec-4] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 763 +2025-10-29 10:28:08 [http-nio-8084-exec-4] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 763, size: 8236 bytes +2025-10-29 10:28:08 [http-nio-8084-exec-5] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 764 +2025-10-29 10:28:08 [http-nio-8084-exec-5] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 764, size: 8236 bytes +2025-10-29 10:28:08 [http-nio-8084-exec-6] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 765 +2025-10-29 10:28:08 [http-nio-8084-exec-6] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 765, size: 8236 bytes +2025-10-29 10:28:09 [http-nio-8084-exec-7] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 766 +2025-10-29 10:28:09 [http-nio-8084-exec-7] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 766, size: 8236 bytes +2025-10-29 10:28:09 [http-nio-8084-exec-8] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 767 +2025-10-29 10:28:09 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 767, size: 8236 bytes +2025-10-29 10:28:09 [http-nio-8084-exec-9] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 768 +2025-10-29 10:28:09 [http-nio-8084-exec-9] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 768, size: 8236 bytes +2025-10-29 10:28:09 [http-nio-8084-exec-10] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 769 +2025-10-29 10:28:09 [http-nio-8084-exec-10] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 769, size: 8236 bytes +2025-10-29 10:28:10 [http-nio-8084-exec-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 770 +2025-10-29 10:28:10 [http-nio-8084-exec-1] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 770, size: 8236 bytes +2025-10-29 10:28:10 [http-nio-8084-exec-2] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 771 +2025-10-29 10:28:10 [http-nio-8084-exec-2] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 771, size: 8236 bytes +2025-10-29 10:28:10 [http-nio-8084-exec-3] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 772 +2025-10-29 10:28:10 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 772, size: 8236 bytes +2025-10-29 10:28:10 [http-nio-8084-exec-4] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 773 +2025-10-29 10:28:10 [http-nio-8084-exec-4] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 773, size: 8236 bytes +2025-10-29 10:28:11 [http-nio-8084-exec-5] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 774 +2025-10-29 10:28:11 [http-nio-8084-exec-5] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 774, size: 8236 bytes +2025-10-29 10:28:11 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:28:11 [scheduling-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 조회 완료 - meetingId: test-meeting-001, count: 20 +2025-10-29 10:28:11 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 오디오 청크 조회 완료 - meetingId: test-meeting-001, chunks: 20개 +2025-10-29 10:28:11 [scheduling-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 병합 완료 - chunks: 20, totalSize: 164720 +2025-10-29 10:28:11 [scheduling-1] WARN c.u.h.stt.service.AzureSpeechService - Azure Speech Service 비활성화 - 시뮬레이션 결과 반환 +2025-10-29 10:28:11 [scheduling-1] INFO c.u.h.stt.service.AzureSpeechService - [시뮬레이션] 음성 인식 결과: 고객 피드백을 반영한 개선안을 검토 중입니다. +2025-10-29 10:28:11 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - Event Hub 이벤트 발행 완료 - meetingId: test-meeting-001, text: 고객 피드백을 반영한 개선안을 검토 중입니다. +2025-10-29 10:28:11 [ForkJoinPool.commonPool-worker-1] DEBUG c.u.h.s.e.p.EventHubPublisher - Event Hub 발행 시뮬레이션: +2025-10-29 10:28:11 [ForkJoinPool.commonPool-worker-1] DEBUG c.u.h.s.e.p.EventHubPublisher - Topic: transcription-events +2025-10-29 10:28:11 [ForkJoinPool.commonPool-worker-1] DEBUG c.u.h.s.e.p.EventHubPublisher - Event Data: {"eventId":"1010559f-9452-499b-9786-61a55749d7fa","eventType":"SegmentCreated","segmentId":"30e739c6-317f-4e65-9113-17e9f4adba3c","recordingId":"test-meeting-001","meetingId":"test-meeting-001","text":"고객 피드백을 반영한 개선안을 검토 중입니다.","speakerId":"UNKNOWN","speakerName":"참석자","timestamp":[2025,10,29,10,28,11,366446000],"duration":5.0,"confidence":0.85,"warningFlag":false,"eventTime":[2025,10,29,10,28,11,366478000]} +2025-10-29 10:28:11 [ForkJoinPool.commonPool-worker-1] INFO c.u.h.s.e.p.EventHubPublisher - 이벤트 발행 완료 - topic: transcription-events, event: SegmentCreated +2025-10-29 10:28:11 [scheduling-1] INFO c.u.h.s.c.AudioWebSocketHandler - STT 결과 전송 완료 - meetingId: test-meeting-001, sessions: 1개, text: 고객 피드백을 반영한 개선안을 검토 중입니다. +2025-10-29 10:28:11 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - WebSocket 결과 전송 완료 - meetingId: test-meeting-001, text: 고객 피드백을 반영한 개선안을 검토 중입니다. +2025-10-29 10:28:11 [scheduling-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 삭제 완료 - meetingId: test-meeting-001 +2025-10-29 10:28:11 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 회의 처리 완료 - meetingId: test-meeting-001, text: 고객 피드백을 반영한 개선안을 검토 중입니다. +2025-10-29 10:28:11 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:28:11 [http-nio-8084-exec-6] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 775 +2025-10-29 10:28:11 [http-nio-8084-exec-6] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 775, size: 8236 bytes +2025-10-29 10:28:11 [http-nio-8084-exec-7] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 776 +2025-10-29 10:28:11 [http-nio-8084-exec-7] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 776, size: 8236 bytes +2025-10-29 10:28:11 [http-nio-8084-exec-8] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 777 +2025-10-29 10:28:11 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 777, size: 8236 bytes +2025-10-29 10:28:12 [http-nio-8084-exec-9] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 778 +2025-10-29 10:28:12 [http-nio-8084-exec-9] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 778, size: 8236 bytes +2025-10-29 10:28:12 [http-nio-8084-exec-10] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 779 +2025-10-29 10:28:12 [http-nio-8084-exec-10] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 779, size: 8236 bytes +2025-10-29 10:28:12 [http-nio-8084-exec-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 780 +2025-10-29 10:28:12 [http-nio-8084-exec-1] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 780, size: 8236 bytes +2025-10-29 10:28:12 [http-nio-8084-exec-2] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 781 +2025-10-29 10:28:12 [http-nio-8084-exec-2] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 781, size: 8236 bytes +2025-10-29 10:28:13 [http-nio-8084-exec-3] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 782 +2025-10-29 10:28:13 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 782, size: 8236 bytes +2025-10-29 10:28:13 [http-nio-8084-exec-4] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 783 +2025-10-29 10:28:13 [http-nio-8084-exec-4] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 783, size: 8236 bytes +2025-10-29 10:28:13 [http-nio-8084-exec-5] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 784 +2025-10-29 10:28:13 [http-nio-8084-exec-5] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 784, size: 8236 bytes +2025-10-29 10:28:14 [http-nio-8084-exec-6] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 785 +2025-10-29 10:28:14 [http-nio-8084-exec-6] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 785, size: 8236 bytes +2025-10-29 10:28:14 [http-nio-8084-exec-7] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 786 +2025-10-29 10:28:14 [http-nio-8084-exec-7] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 786, size: 8236 bytes +2025-10-29 10:28:14 [http-nio-8084-exec-8] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 787 +2025-10-29 10:28:14 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 787, size: 8236 bytes +2025-10-29 10:28:14 [http-nio-8084-exec-9] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 788 +2025-10-29 10:28:14 [http-nio-8084-exec-9] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 788, size: 8236 bytes +2025-10-29 10:28:15 [http-nio-8084-exec-10] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 789 +2025-10-29 10:28:15 [http-nio-8084-exec-10] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 789, size: 8236 bytes +2025-10-29 10:28:15 [http-nio-8084-exec-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 790 +2025-10-29 10:28:15 [http-nio-8084-exec-1] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 790, size: 8236 bytes +2025-10-29 10:28:15 [http-nio-8084-exec-2] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 791 +2025-10-29 10:28:15 [http-nio-8084-exec-2] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 791, size: 8236 bytes +2025-10-29 10:28:15 [http-nio-8084-exec-3] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 792 +2025-10-29 10:28:15 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 792, size: 8236 bytes +2025-10-29 10:28:16 [http-nio-8084-exec-4] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 793 +2025-10-29 10:28:16 [http-nio-8084-exec-4] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 793, size: 8236 bytes +2025-10-29 10:28:16 [http-nio-8084-exec-5] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 794 +2025-10-29 10:28:16 [http-nio-8084-exec-5] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 794, size: 8236 bytes +2025-10-29 10:28:16 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:28:16 [scheduling-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 조회 완료 - meetingId: test-meeting-001, count: 20 +2025-10-29 10:28:16 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 오디오 청크 조회 완료 - meetingId: test-meeting-001, chunks: 20개 +2025-10-29 10:28:16 [scheduling-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 병합 완료 - chunks: 20, totalSize: 164720 +2025-10-29 10:28:16 [scheduling-1] WARN c.u.h.stt.service.AzureSpeechService - Azure Speech Service 비활성화 - 시뮬레이션 결과 반환 +2025-10-29 10:28:16 [scheduling-1] INFO c.u.h.stt.service.AzureSpeechService - [시뮬레이션] 음성 인식 결과: 신제품 개발 일정에 대해 논의하고 있습니다. +2025-10-29 10:28:16 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - Event Hub 이벤트 발행 완료 - meetingId: test-meeting-001, text: 신제품 개발 일정에 대해 논의하고 있습니다. +2025-10-29 10:28:16 [ForkJoinPool.commonPool-worker-1] DEBUG c.u.h.s.e.p.EventHubPublisher - Event Hub 발행 시뮬레이션: +2025-10-29 10:28:16 [ForkJoinPool.commonPool-worker-1] DEBUG c.u.h.s.e.p.EventHubPublisher - Topic: transcription-events +2025-10-29 10:28:16 [ForkJoinPool.commonPool-worker-1] DEBUG c.u.h.s.e.p.EventHubPublisher - Event Data: {"eventId":"5d37e235-ed4b-47f7-8298-2478546a456c","eventType":"SegmentCreated","segmentId":"48bf7977-762d-48bb-8686-a6594a9c6217","recordingId":"test-meeting-001","meetingId":"test-meeting-001","text":"신제품 개발 일정에 대해 논의하고 있습니다.","speakerId":"UNKNOWN","speakerName":"참석자","timestamp":[2025,10,29,10,28,16,455903000],"duration":5.0,"confidence":0.85,"warningFlag":false,"eventTime":[2025,10,29,10,28,16,455936000]} +2025-10-29 10:28:16 [ForkJoinPool.commonPool-worker-1] INFO c.u.h.s.e.p.EventHubPublisher - 이벤트 발행 완료 - topic: transcription-events, event: SegmentCreated +2025-10-29 10:28:16 [scheduling-1] INFO c.u.h.s.c.AudioWebSocketHandler - STT 결과 전송 완료 - meetingId: test-meeting-001, sessions: 1개, text: 신제품 개발 일정에 대해 논의하고 있습니다. +2025-10-29 10:28:16 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - WebSocket 결과 전송 완료 - meetingId: test-meeting-001, text: 신제품 개발 일정에 대해 논의하고 있습니다. +2025-10-29 10:28:16 [scheduling-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 삭제 완료 - meetingId: test-meeting-001 +2025-10-29 10:28:16 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 회의 처리 완료 - meetingId: test-meeting-001, text: 신제품 개발 일정에 대해 논의하고 있습니다. +2025-10-29 10:28:16 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:28:16 [http-nio-8084-exec-6] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 795 +2025-10-29 10:28:16 [http-nio-8084-exec-6] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 795, size: 8236 bytes +2025-10-29 10:28:16 [http-nio-8084-exec-7] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 796 +2025-10-29 10:28:16 [http-nio-8084-exec-7] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 796, size: 8236 bytes +2025-10-29 10:28:17 [http-nio-8084-exec-8] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 797 +2025-10-29 10:28:17 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 797, size: 8236 bytes +2025-10-29 10:28:17 [http-nio-8084-exec-9] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 798 +2025-10-29 10:28:17 [http-nio-8084-exec-9] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 798, size: 8236 bytes +2025-10-29 10:28:17 [http-nio-8084-exec-10] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 799 +2025-10-29 10:28:17 [http-nio-8084-exec-10] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 799, size: 8236 bytes +2025-10-29 10:28:17 [http-nio-8084-exec-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 800 +2025-10-29 10:28:17 [http-nio-8084-exec-1] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 800, size: 8236 bytes +2025-10-29 10:28:18 [http-nio-8084-exec-2] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 801 +2025-10-29 10:28:18 [http-nio-8084-exec-2] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 801, size: 8236 bytes +2025-10-29 10:28:18 [http-nio-8084-exec-3] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 802 +2025-10-29 10:28:18 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 802, size: 8236 bytes +2025-10-29 10:28:18 [http-nio-8084-exec-4] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 803 +2025-10-29 10:28:18 [http-nio-8084-exec-4] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 803, size: 8236 bytes +2025-10-29 10:28:18 [http-nio-8084-exec-5] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 804 +2025-10-29 10:28:18 [http-nio-8084-exec-5] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 804, size: 8236 bytes +2025-10-29 10:28:19 [http-nio-8084-exec-6] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 805 +2025-10-29 10:28:19 [http-nio-8084-exec-6] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 805, size: 8236 bytes +2025-10-29 10:28:19 [http-nio-8084-exec-7] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 806 +2025-10-29 10:28:19 [http-nio-8084-exec-7] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 806, size: 8236 bytes +2025-10-29 10:28:19 [http-nio-8084-exec-8] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 807 +2025-10-29 10:28:19 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 807, size: 8236 bytes +2025-10-29 10:28:19 [http-nio-8084-exec-9] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 808 +2025-10-29 10:28:19 [http-nio-8084-exec-9] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 808, size: 8236 bytes +2025-10-29 10:28:20 [http-nio-8084-exec-10] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 809 +2025-10-29 10:28:20 [http-nio-8084-exec-10] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 809, size: 8236 bytes +2025-10-29 10:28:20 [http-nio-8084-exec-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 810 +2025-10-29 10:28:20 [http-nio-8084-exec-1] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 810, size: 8236 bytes +2025-10-29 10:28:20 [http-nio-8084-exec-2] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 811 +2025-10-29 10:28:20 [http-nio-8084-exec-2] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 811, size: 8236 bytes +2025-10-29 10:28:20 [http-nio-8084-exec-3] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 812 +2025-10-29 10:28:20 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 812, size: 8236 bytes +2025-10-29 10:28:21 [http-nio-8084-exec-4] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 813 +2025-10-29 10:28:21 [http-nio-8084-exec-4] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 813, size: 8236 bytes +2025-10-29 10:28:21 [http-nio-8084-exec-5] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 814 +2025-10-29 10:28:21 [http-nio-8084-exec-5] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 814, size: 8236 bytes +2025-10-29 10:28:21 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:28:21 [scheduling-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 조회 완료 - meetingId: test-meeting-001, count: 20 +2025-10-29 10:28:21 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 오디오 청크 조회 완료 - meetingId: test-meeting-001, chunks: 20개 +2025-10-29 10:28:21 [scheduling-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 병합 완료 - chunks: 20, totalSize: 164720 +2025-10-29 10:28:21 [scheduling-1] WARN c.u.h.stt.service.AzureSpeechService - Azure Speech Service 비활성화 - 시뮬레이션 결과 반환 +2025-10-29 10:28:21 [scheduling-1] INFO c.u.h.stt.service.AzureSpeechService - [시뮬레이션] 음성 인식 결과: 다음 주까지 프로토타입을 완성하기로 했습니다. +2025-10-29 10:28:21 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - Event Hub 이벤트 발행 완료 - meetingId: test-meeting-001, text: 다음 주까지 프로토타입을 완성하기로 했습니다. +2025-10-29 10:28:21 [ForkJoinPool.commonPool-worker-1] DEBUG c.u.h.s.e.p.EventHubPublisher - Event Hub 발행 시뮬레이션: +2025-10-29 10:28:21 [ForkJoinPool.commonPool-worker-1] DEBUG c.u.h.s.e.p.EventHubPublisher - Topic: transcription-events +2025-10-29 10:28:21 [ForkJoinPool.commonPool-worker-1] DEBUG c.u.h.s.e.p.EventHubPublisher - Event Data: {"eventId":"cfc008c2-999c-45fa-bb4e-f153a7cea92a","eventType":"SegmentCreated","segmentId":"875fe3a5-96a1-4dd8-980c-ab608a168afb","recordingId":"test-meeting-001","meetingId":"test-meeting-001","text":"다음 주까지 프로토타입을 완성하기로 했습니다.","speakerId":"UNKNOWN","speakerName":"참석자","timestamp":[2025,10,29,10,28,21,545818000],"duration":5.0,"confidence":0.85,"warningFlag":false,"eventTime":[2025,10,29,10,28,21,545850000]} +2025-10-29 10:28:21 [ForkJoinPool.commonPool-worker-1] INFO c.u.h.s.e.p.EventHubPublisher - 이벤트 발행 완료 - topic: transcription-events, event: SegmentCreated +2025-10-29 10:28:21 [scheduling-1] INFO c.u.h.s.c.AudioWebSocketHandler - STT 결과 전송 완료 - meetingId: test-meeting-001, sessions: 1개, text: 다음 주까지 프로토타입을 완성하기로 했습니다. +2025-10-29 10:28:21 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - WebSocket 결과 전송 완료 - meetingId: test-meeting-001, text: 다음 주까지 프로토타입을 완성하기로 했습니다. +2025-10-29 10:28:21 [scheduling-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 삭제 완료 - meetingId: test-meeting-001 +2025-10-29 10:28:21 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 회의 처리 완료 - meetingId: test-meeting-001, text: 다음 주까지 프로토타입을 완성하기로 했습니다. +2025-10-29 10:28:21 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:28:21 [http-nio-8084-exec-6] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 815 +2025-10-29 10:28:21 [http-nio-8084-exec-6] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 815, size: 8236 bytes +2025-10-29 10:28:21 [http-nio-8084-exec-7] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 816 +2025-10-29 10:28:21 [http-nio-8084-exec-7] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 816, size: 8236 bytes +2025-10-29 10:28:22 [http-nio-8084-exec-8] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 817 +2025-10-29 10:28:22 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 817, size: 8236 bytes +2025-10-29 10:28:22 [http-nio-8084-exec-9] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 818 +2025-10-29 10:28:22 [http-nio-8084-exec-9] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 818, size: 8236 bytes +2025-10-29 10:28:22 [http-nio-8084-exec-10] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 819 +2025-10-29 10:28:22 [http-nio-8084-exec-10] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 819, size: 8236 bytes +2025-10-29 10:28:22 [http-nio-8084-exec-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 820 +2025-10-29 10:28:22 [http-nio-8084-exec-1] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 820, size: 8236 bytes +2025-10-29 10:28:23 [http-nio-8084-exec-2] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 821 +2025-10-29 10:28:23 [http-nio-8084-exec-2] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 821, size: 8236 bytes +2025-10-29 10:28:23 [http-nio-8084-exec-3] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 822 +2025-10-29 10:28:23 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 822, size: 8236 bytes +2025-10-29 10:28:23 [http-nio-8084-exec-4] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 823 +2025-10-29 10:28:23 [http-nio-8084-exec-4] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 823, size: 8236 bytes +2025-10-29 10:28:23 [http-nio-8084-exec-5] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 824 +2025-10-29 10:28:23 [http-nio-8084-exec-5] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 824, size: 8236 bytes +2025-10-29 10:28:24 [http-nio-8084-exec-6] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 825 +2025-10-29 10:28:24 [http-nio-8084-exec-6] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 825, size: 8236 bytes +2025-10-29 10:28:24 [http-nio-8084-exec-7] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 826 +2025-10-29 10:28:24 [http-nio-8084-exec-7] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 826, size: 8236 bytes +2025-10-29 10:28:24 [http-nio-8084-exec-8] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 827 +2025-10-29 10:28:24 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 827, size: 8236 bytes +2025-10-29 10:28:25 [http-nio-8084-exec-9] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 828 +2025-10-29 10:28:25 [http-nio-8084-exec-9] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 828, size: 8236 bytes +2025-10-29 10:28:25 [http-nio-8084-exec-10] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 829 +2025-10-29 10:28:25 [http-nio-8084-exec-10] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 829, size: 8236 bytes +2025-10-29 10:28:25 [http-nio-8084-exec-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 830 +2025-10-29 10:28:25 [http-nio-8084-exec-1] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 830, size: 8236 bytes +2025-10-29 10:28:25 [http-nio-8084-exec-2] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 831 +2025-10-29 10:28:25 [http-nio-8084-exec-2] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 831, size: 8236 bytes +2025-10-29 10:28:26 [http-nio-8084-exec-3] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 832 +2025-10-29 10:28:26 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 832, size: 8236 bytes +2025-10-29 10:28:26 [http-nio-8084-exec-4] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 833 +2025-10-29 10:28:26 [http-nio-8084-exec-4] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 833, size: 8236 bytes +2025-10-29 10:28:26 [http-nio-8084-exec-5] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 834 +2025-10-29 10:28:26 [http-nio-8084-exec-5] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 834, size: 8236 bytes +2025-10-29 10:28:26 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:28:26 [scheduling-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 조회 완료 - meetingId: test-meeting-001, count: 20 +2025-10-29 10:28:26 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 오디오 청크 조회 완료 - meetingId: test-meeting-001, chunks: 20개 +2025-10-29 10:28:26 [scheduling-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 병합 완료 - chunks: 20, totalSize: 164720 +2025-10-29 10:28:26 [scheduling-1] WARN c.u.h.stt.service.AzureSpeechService - Azure Speech Service 비활성화 - 시뮬레이션 결과 반환 +2025-10-29 10:28:26 [scheduling-1] INFO c.u.h.stt.service.AzureSpeechService - [시뮬레이션] 음성 인식 결과: 기술 스택 선정에 대한 의견을 나누고 있습니다. +2025-10-29 10:28:26 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - Event Hub 이벤트 발행 완료 - meetingId: test-meeting-001, text: 기술 스택 선정에 대한 의견을 나누고 있습니다. +2025-10-29 10:28:26 [ForkJoinPool.commonPool-worker-1] DEBUG c.u.h.s.e.p.EventHubPublisher - Event Hub 발행 시뮬레이션: +2025-10-29 10:28:26 [ForkJoinPool.commonPool-worker-1] DEBUG c.u.h.s.e.p.EventHubPublisher - Topic: transcription-events +2025-10-29 10:28:26 [ForkJoinPool.commonPool-worker-1] DEBUG c.u.h.s.e.p.EventHubPublisher - Event Data: {"eventId":"549f2c59-a37e-4543-bef5-1606bccb47fa","eventType":"SegmentCreated","segmentId":"92adce08-4afa-4854-a74a-e7be37e17a83","recordingId":"test-meeting-001","meetingId":"test-meeting-001","text":"기술 스택 선정에 대한 의견을 나누고 있습니다.","speakerId":"UNKNOWN","speakerName":"참석자","timestamp":[2025,10,29,10,28,26,635078000],"duration":5.0,"confidence":0.85,"warningFlag":false,"eventTime":[2025,10,29,10,28,26,635108000]} +2025-10-29 10:28:26 [ForkJoinPool.commonPool-worker-1] INFO c.u.h.s.e.p.EventHubPublisher - 이벤트 발행 완료 - topic: transcription-events, event: SegmentCreated +2025-10-29 10:28:26 [scheduling-1] INFO c.u.h.s.c.AudioWebSocketHandler - STT 결과 전송 완료 - meetingId: test-meeting-001, sessions: 1개, text: 기술 스택 선정에 대한 의견을 나누고 있습니다. +2025-10-29 10:28:26 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - WebSocket 결과 전송 완료 - meetingId: test-meeting-001, text: 기술 스택 선정에 대한 의견을 나누고 있습니다. +2025-10-29 10:28:26 [scheduling-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 삭제 완료 - meetingId: test-meeting-001 +2025-10-29 10:28:26 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 회의 처리 완료 - meetingId: test-meeting-001, text: 기술 스택 선정에 대한 의견을 나누고 있습니다. +2025-10-29 10:28:26 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:28:26 [http-nio-8084-exec-6] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 835 +2025-10-29 10:28:26 [http-nio-8084-exec-6] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 835, size: 8236 bytes +2025-10-29 10:28:27 [http-nio-8084-exec-7] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 836 +2025-10-29 10:28:27 [http-nio-8084-exec-7] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 836, size: 8236 bytes +2025-10-29 10:28:27 [http-nio-8084-exec-8] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 837 +2025-10-29 10:28:27 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 837, size: 8236 bytes +2025-10-29 10:28:27 [http-nio-8084-exec-9] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 838 +2025-10-29 10:28:27 [http-nio-8084-exec-9] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 838, size: 8236 bytes +2025-10-29 10:28:27 [http-nio-8084-exec-10] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 839 +2025-10-29 10:28:27 [http-nio-8084-exec-10] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 839, size: 8236 bytes +2025-10-29 10:28:28 [http-nio-8084-exec-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 840 +2025-10-29 10:28:28 [http-nio-8084-exec-1] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 840, size: 8236 bytes +2025-10-29 10:28:28 [http-nio-8084-exec-2] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 841 +2025-10-29 10:28:28 [http-nio-8084-exec-2] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 841, size: 8236 bytes +2025-10-29 10:28:28 [http-nio-8084-exec-3] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 842 +2025-10-29 10:28:28 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 842, size: 8236 bytes +2025-10-29 10:28:28 [http-nio-8084-exec-4] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 843 +2025-10-29 10:28:28 [http-nio-8084-exec-4] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 843, size: 8236 bytes +2025-10-29 10:28:29 [http-nio-8084-exec-5] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 844 +2025-10-29 10:28:29 [http-nio-8084-exec-5] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 844, size: 8236 bytes +2025-10-29 10:28:29 [http-nio-8084-exec-6] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 845 +2025-10-29 10:28:29 [http-nio-8084-exec-6] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 845, size: 8236 bytes +2025-10-29 10:28:29 [http-nio-8084-exec-7] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 846 +2025-10-29 10:28:29 [http-nio-8084-exec-7] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 846, size: 8236 bytes +2025-10-29 10:28:29 [http-nio-8084-exec-8] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 847 +2025-10-29 10:28:29 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 847, size: 8236 bytes +2025-10-29 10:28:30 [http-nio-8084-exec-9] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 848 +2025-10-29 10:28:30 [http-nio-8084-exec-9] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 848, size: 8236 bytes +2025-10-29 10:28:30 [http-nio-8084-exec-10] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 849 +2025-10-29 10:28:30 [http-nio-8084-exec-10] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 849, size: 8236 bytes +2025-10-29 10:28:30 [http-nio-8084-exec-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 850 +2025-10-29 10:28:30 [http-nio-8084-exec-1] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 850, size: 8236 bytes +2025-10-29 10:28:30 [http-nio-8084-exec-2] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 851 +2025-10-29 10:28:30 [http-nio-8084-exec-2] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 851, size: 8236 bytes +2025-10-29 10:28:31 [http-nio-8084-exec-3] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 852 +2025-10-29 10:28:31 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 852, size: 8236 bytes +2025-10-29 10:28:31 [http-nio-8084-exec-4] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 853 +2025-10-29 10:28:31 [http-nio-8084-exec-4] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 853, size: 8236 bytes +2025-10-29 10:28:31 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:28:31 [http-nio-8084-exec-5] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 854 +2025-10-29 10:28:31 [http-nio-8084-exec-5] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 854, size: 8236 bytes +2025-10-29 10:28:31 [scheduling-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 조회 완료 - meetingId: test-meeting-001, count: 20 +2025-10-29 10:28:31 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 오디오 청크 조회 완료 - meetingId: test-meeting-001, chunks: 20개 +2025-10-29 10:28:31 [scheduling-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 병합 완료 - chunks: 20, totalSize: 164720 +2025-10-29 10:28:31 [scheduling-1] WARN c.u.h.stt.service.AzureSpeechService - Azure Speech Service 비활성화 - 시뮬레이션 결과 반환 +2025-10-29 10:28:31 [scheduling-1] INFO c.u.h.stt.service.AzureSpeechService - [시뮬레이션] 음성 인식 결과: 기술 스택 선정에 대한 의견을 나누고 있습니다. +2025-10-29 10:28:31 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - Event Hub 이벤트 발행 완료 - meetingId: test-meeting-001, text: 기술 스택 선정에 대한 의견을 나누고 있습니다. +2025-10-29 10:28:31 [ForkJoinPool.commonPool-worker-1] DEBUG c.u.h.s.e.p.EventHubPublisher - Event Hub 발행 시뮬레이션: +2025-10-29 10:28:31 [ForkJoinPool.commonPool-worker-1] DEBUG c.u.h.s.e.p.EventHubPublisher - Topic: transcription-events +2025-10-29 10:28:31 [ForkJoinPool.commonPool-worker-1] DEBUG c.u.h.s.e.p.EventHubPublisher - Event Data: {"eventId":"23002082-38d1-4d9d-ba87-1beea342add0","eventType":"SegmentCreated","segmentId":"7990ab4a-f167-4585-990a-05d67c1d7d2a","recordingId":"test-meeting-001","meetingId":"test-meeting-001","text":"기술 스택 선정에 대한 의견을 나누고 있습니다.","speakerId":"UNKNOWN","speakerName":"참석자","timestamp":[2025,10,29,10,28,31,729516000],"duration":5.0,"confidence":0.85,"warningFlag":false,"eventTime":[2025,10,29,10,28,31,729546000]} +2025-10-29 10:28:31 [ForkJoinPool.commonPool-worker-1] INFO c.u.h.s.e.p.EventHubPublisher - 이벤트 발행 완료 - topic: transcription-events, event: SegmentCreated +2025-10-29 10:28:31 [scheduling-1] INFO c.u.h.s.c.AudioWebSocketHandler - STT 결과 전송 완료 - meetingId: test-meeting-001, sessions: 1개, text: 기술 스택 선정에 대한 의견을 나누고 있습니다. +2025-10-29 10:28:31 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - WebSocket 결과 전송 완료 - meetingId: test-meeting-001, text: 기술 스택 선정에 대한 의견을 나누고 있습니다. +2025-10-29 10:28:31 [scheduling-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 삭제 완료 - meetingId: test-meeting-001 +2025-10-29 10:28:31 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 회의 처리 완료 - meetingId: test-meeting-001, text: 기술 스택 선정에 대한 의견을 나누고 있습니다. +2025-10-29 10:28:31 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:28:31 [http-nio-8084-exec-6] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 855 +2025-10-29 10:28:31 [http-nio-8084-exec-6] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 855, size: 8236 bytes +2025-10-29 10:28:32 [http-nio-8084-exec-7] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 856 +2025-10-29 10:28:32 [http-nio-8084-exec-7] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 856, size: 8236 bytes +2025-10-29 10:28:32 [http-nio-8084-exec-8] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 857 +2025-10-29 10:28:32 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 857, size: 8236 bytes +2025-10-29 10:28:32 [http-nio-8084-exec-9] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 858 +2025-10-29 10:28:32 [http-nio-8084-exec-9] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 858, size: 8236 bytes +2025-10-29 10:28:32 [http-nio-8084-exec-10] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 859 +2025-10-29 10:28:32 [http-nio-8084-exec-10] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 859, size: 8236 bytes +2025-10-29 10:28:33 [http-nio-8084-exec-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 860 +2025-10-29 10:28:33 [http-nio-8084-exec-1] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 860, size: 8236 bytes +2025-10-29 10:28:33 [http-nio-8084-exec-2] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 861 +2025-10-29 10:28:33 [http-nio-8084-exec-2] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 861, size: 8236 bytes +2025-10-29 10:28:33 [http-nio-8084-exec-3] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 862 +2025-10-29 10:28:33 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 862, size: 8236 bytes +2025-10-29 10:28:33 [http-nio-8084-exec-4] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 863 +2025-10-29 10:28:33 [http-nio-8084-exec-4] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 863, size: 8236 bytes +2025-10-29 10:28:34 [http-nio-8084-exec-5] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 864 +2025-10-29 10:28:34 [http-nio-8084-exec-5] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 864, size: 8236 bytes +2025-10-29 10:28:34 [http-nio-8084-exec-6] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 865 +2025-10-29 10:28:34 [http-nio-8084-exec-6] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 865, size: 8236 bytes +2025-10-29 10:28:34 [http-nio-8084-exec-7] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 866 +2025-10-29 10:28:34 [http-nio-8084-exec-7] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 866, size: 8236 bytes +2025-10-29 10:28:35 [http-nio-8084-exec-8] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 867 +2025-10-29 10:28:35 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 867, size: 8236 bytes +2025-10-29 10:28:35 [http-nio-8084-exec-9] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 868 +2025-10-29 10:28:35 [http-nio-8084-exec-9] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 868, size: 8236 bytes +2025-10-29 10:28:35 [http-nio-8084-exec-10] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 869 +2025-10-29 10:28:35 [http-nio-8084-exec-10] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 869, size: 8236 bytes +2025-10-29 10:28:35 [http-nio-8084-exec-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 870 +2025-10-29 10:28:35 [http-nio-8084-exec-1] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 870, size: 8236 bytes +2025-10-29 10:28:36 [http-nio-8084-exec-2] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 871 +2025-10-29 10:28:36 [http-nio-8084-exec-2] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 871, size: 8236 bytes +2025-10-29 10:28:36 [http-nio-8084-exec-3] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 872 +2025-10-29 10:28:36 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 872, size: 8236 bytes +2025-10-29 10:28:36 [http-nio-8084-exec-4] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 873 +2025-10-29 10:28:36 [http-nio-8084-exec-4] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 873, size: 8236 bytes +2025-10-29 10:28:36 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:28:36 [scheduling-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 조회 완료 - meetingId: test-meeting-001, count: 19 +2025-10-29 10:28:36 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 오디오 청크 조회 완료 - meetingId: test-meeting-001, chunks: 19개 +2025-10-29 10:28:36 [scheduling-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 병합 완료 - chunks: 19, totalSize: 156484 +2025-10-29 10:28:36 [scheduling-1] WARN c.u.h.stt.service.AzureSpeechService - Azure Speech Service 비활성화 - 시뮬레이션 결과 반환 +2025-10-29 10:28:36 [scheduling-1] INFO c.u.h.stt.service.AzureSpeechService - [시뮬레이션] 음성 인식 결과: 신제품 개발 일정에 대해 논의하고 있습니다. +2025-10-29 10:28:36 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - Event Hub 이벤트 발행 완료 - meetingId: test-meeting-001, text: 신제품 개발 일정에 대해 논의하고 있습니다. +2025-10-29 10:28:36 [ForkJoinPool.commonPool-worker-1] DEBUG c.u.h.s.e.p.EventHubPublisher - Event Hub 발행 시뮬레이션: +2025-10-29 10:28:36 [ForkJoinPool.commonPool-worker-1] DEBUG c.u.h.s.e.p.EventHubPublisher - Topic: transcription-events +2025-10-29 10:28:36 [ForkJoinPool.commonPool-worker-1] DEBUG c.u.h.s.e.p.EventHubPublisher - Event Data: {"eventId":"9dbf91fe-ebf0-464f-80e3-c0e544f54c42","eventType":"SegmentCreated","segmentId":"a3d8505b-54f1-4e55-8d33-6d8b6147d48b","recordingId":"test-meeting-001","meetingId":"test-meeting-001","text":"신제품 개발 일정에 대해 논의하고 있습니다.","speakerId":"UNKNOWN","speakerName":"참석자","timestamp":[2025,10,29,10,28,36,814993000],"duration":5.0,"confidence":0.85,"warningFlag":false,"eventTime":[2025,10,29,10,28,36,815046000]} +2025-10-29 10:28:36 [ForkJoinPool.commonPool-worker-1] INFO c.u.h.s.e.p.EventHubPublisher - 이벤트 발행 완료 - topic: transcription-events, event: SegmentCreated +2025-10-29 10:28:36 [scheduling-1] INFO c.u.h.s.c.AudioWebSocketHandler - STT 결과 전송 완료 - meetingId: test-meeting-001, sessions: 1개, text: 신제품 개발 일정에 대해 논의하고 있습니다. +2025-10-29 10:28:36 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - WebSocket 결과 전송 완료 - meetingId: test-meeting-001, text: 신제품 개발 일정에 대해 논의하고 있습니다. +2025-10-29 10:28:36 [scheduling-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 삭제 완료 - meetingId: test-meeting-001 +2025-10-29 10:28:36 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 회의 처리 완료 - meetingId: test-meeting-001, text: 신제품 개발 일정에 대해 논의하고 있습니다. +2025-10-29 10:28:36 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:28:36 [http-nio-8084-exec-5] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 874 +2025-10-29 10:28:36 [http-nio-8084-exec-5] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 874, size: 8236 bytes +2025-10-29 10:28:37 [http-nio-8084-exec-6] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 875 +2025-10-29 10:28:37 [http-nio-8084-exec-6] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 875, size: 8236 bytes +2025-10-29 10:28:37 [http-nio-8084-exec-7] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 876 +2025-10-29 10:28:37 [http-nio-8084-exec-7] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 876, size: 8236 bytes +2025-10-29 10:28:37 [http-nio-8084-exec-8] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 877 +2025-10-29 10:28:37 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 877, size: 8236 bytes +2025-10-29 10:28:37 [http-nio-8084-exec-9] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 878 +2025-10-29 10:28:37 [http-nio-8084-exec-9] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 878, size: 8236 bytes +2025-10-29 10:28:38 [http-nio-8084-exec-10] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 879 +2025-10-29 10:28:38 [http-nio-8084-exec-10] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 879, size: 8236 bytes +2025-10-29 10:28:38 [http-nio-8084-exec-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 880 +2025-10-29 10:28:38 [http-nio-8084-exec-1] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 880, size: 8236 bytes +2025-10-29 10:28:38 [http-nio-8084-exec-2] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 881 +2025-10-29 10:28:38 [http-nio-8084-exec-2] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 881, size: 8236 bytes +2025-10-29 10:28:38 [http-nio-8084-exec-3] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 882 +2025-10-29 10:28:38 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 882, size: 8236 bytes +2025-10-29 10:28:39 [http-nio-8084-exec-4] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 883 +2025-10-29 10:28:39 [http-nio-8084-exec-4] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 883, size: 8236 bytes +2025-10-29 10:28:39 [http-nio-8084-exec-5] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 884 +2025-10-29 10:28:39 [http-nio-8084-exec-5] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 884, size: 8236 bytes +2025-10-29 10:28:39 [http-nio-8084-exec-6] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 885 +2025-10-29 10:28:39 [http-nio-8084-exec-6] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 885, size: 8236 bytes +2025-10-29 10:28:39 [http-nio-8084-exec-7] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 886 +2025-10-29 10:28:39 [http-nio-8084-exec-7] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 886, size: 8236 bytes +2025-10-29 10:28:40 [http-nio-8084-exec-8] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 887 +2025-10-29 10:28:40 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 887, size: 8236 bytes +2025-10-29 10:28:40 [http-nio-8084-exec-9] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 888 +2025-10-29 10:28:40 [http-nio-8084-exec-9] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 888, size: 8236 bytes +2025-10-29 10:28:40 [http-nio-8084-exec-10] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 889 +2025-10-29 10:28:40 [http-nio-8084-exec-10] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 889, size: 8236 bytes +2025-10-29 10:28:40 [http-nio-8084-exec-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 890 +2025-10-29 10:28:40 [http-nio-8084-exec-1] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 890, size: 8236 bytes +2025-10-29 10:28:41 [http-nio-8084-exec-2] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 891 +2025-10-29 10:28:41 [http-nio-8084-exec-2] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 891, size: 8236 bytes +2025-10-29 10:28:41 [http-nio-8084-exec-3] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 892 +2025-10-29 10:28:41 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 892, size: 8236 bytes +2025-10-29 10:28:41 [http-nio-8084-exec-4] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 893 +2025-10-29 10:28:41 [http-nio-8084-exec-4] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 893, size: 8236 bytes +2025-10-29 10:28:41 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:28:41 [scheduling-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 조회 완료 - meetingId: test-meeting-001, count: 19 +2025-10-29 10:28:41 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 오디오 청크 조회 완료 - meetingId: test-meeting-001, chunks: 19개 +2025-10-29 10:28:41 [scheduling-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 병합 완료 - chunks: 19, totalSize: 156484 +2025-10-29 10:28:41 [scheduling-1] WARN c.u.h.stt.service.AzureSpeechService - Azure Speech Service 비활성화 - 시뮬레이션 결과 반환 +2025-10-29 10:28:41 [scheduling-1] INFO c.u.h.stt.service.AzureSpeechService - [시뮬레이션] 음성 인식 결과: 기술 스택 선정에 대한 의견을 나누고 있습니다. +2025-10-29 10:28:41 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - Event Hub 이벤트 발행 완료 - meetingId: test-meeting-001, text: 기술 스택 선정에 대한 의견을 나누고 있습니다. +2025-10-29 10:28:41 [ForkJoinPool.commonPool-worker-1] DEBUG c.u.h.s.e.p.EventHubPublisher - Event Hub 발행 시뮬레이션: +2025-10-29 10:28:41 [ForkJoinPool.commonPool-worker-1] DEBUG c.u.h.s.e.p.EventHubPublisher - Topic: transcription-events +2025-10-29 10:28:41 [ForkJoinPool.commonPool-worker-1] DEBUG c.u.h.s.e.p.EventHubPublisher - Event Data: {"eventId":"087134bf-b914-4469-b637-2bd1df53c112","eventType":"SegmentCreated","segmentId":"7b68418b-661e-470a-b36b-7ac78da6e7ce","recordingId":"test-meeting-001","meetingId":"test-meeting-001","text":"기술 스택 선정에 대한 의견을 나누고 있습니다.","speakerId":"UNKNOWN","speakerName":"참석자","timestamp":[2025,10,29,10,28,41,890043000],"duration":5.0,"confidence":0.85,"warningFlag":false,"eventTime":[2025,10,29,10,28,41,890054000]} +2025-10-29 10:28:41 [ForkJoinPool.commonPool-worker-1] INFO c.u.h.s.e.p.EventHubPublisher - 이벤트 발행 완료 - topic: transcription-events, event: SegmentCreated +2025-10-29 10:28:41 [scheduling-1] INFO c.u.h.s.c.AudioWebSocketHandler - STT 결과 전송 완료 - meetingId: test-meeting-001, sessions: 1개, text: 기술 스택 선정에 대한 의견을 나누고 있습니다. +2025-10-29 10:28:41 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - WebSocket 결과 전송 완료 - meetingId: test-meeting-001, text: 기술 스택 선정에 대한 의견을 나누고 있습니다. +2025-10-29 10:28:41 [scheduling-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 삭제 완료 - meetingId: test-meeting-001 +2025-10-29 10:28:41 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 회의 처리 완료 - meetingId: test-meeting-001, text: 기술 스택 선정에 대한 의견을 나누고 있습니다. +2025-10-29 10:28:41 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:28:41 [http-nio-8084-exec-5] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 894 +2025-10-29 10:28:41 [http-nio-8084-exec-5] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 894, size: 8236 bytes +2025-10-29 10:28:42 [http-nio-8084-exec-6] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 895 +2025-10-29 10:28:42 [http-nio-8084-exec-6] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 895, size: 8236 bytes +2025-10-29 10:28:42 [http-nio-8084-exec-7] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 896 +2025-10-29 10:28:42 [http-nio-8084-exec-7] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 896, size: 8236 bytes +2025-10-29 10:28:42 [http-nio-8084-exec-8] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 897 +2025-10-29 10:28:42 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 897, size: 8236 bytes +2025-10-29 10:28:42 [http-nio-8084-exec-9] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 898 +2025-10-29 10:28:42 [http-nio-8084-exec-9] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 898, size: 8236 bytes +2025-10-29 10:28:43 [http-nio-8084-exec-10] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 899 +2025-10-29 10:28:43 [http-nio-8084-exec-10] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 899, size: 8236 bytes +2025-10-29 10:28:43 [http-nio-8084-exec-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 900 +2025-10-29 10:28:43 [http-nio-8084-exec-1] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 900, size: 8236 bytes +2025-10-29 10:28:43 [http-nio-8084-exec-2] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 901 +2025-10-29 10:28:43 [http-nio-8084-exec-2] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 901, size: 8236 bytes +2025-10-29 10:28:43 [http-nio-8084-exec-3] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 902 +2025-10-29 10:28:43 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 902, size: 8236 bytes +2025-10-29 10:28:44 [http-nio-8084-exec-4] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 903 +2025-10-29 10:28:44 [http-nio-8084-exec-4] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 903, size: 8236 bytes +2025-10-29 10:28:44 [http-nio-8084-exec-5] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 904 +2025-10-29 10:28:44 [http-nio-8084-exec-5] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 904, size: 8236 bytes +2025-10-29 10:28:44 [http-nio-8084-exec-6] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 905 +2025-10-29 10:28:44 [http-nio-8084-exec-6] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 905, size: 8236 bytes +2025-10-29 10:28:45 [http-nio-8084-exec-7] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 906 +2025-10-29 10:28:45 [http-nio-8084-exec-7] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 906, size: 8236 bytes +2025-10-29 10:28:45 [http-nio-8084-exec-8] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 907 +2025-10-29 10:28:45 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 907, size: 8236 bytes +2025-10-29 10:28:45 [http-nio-8084-exec-9] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 908 +2025-10-29 10:28:45 [http-nio-8084-exec-9] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 908, size: 8236 bytes +2025-10-29 10:28:45 [http-nio-8084-exec-10] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 909 +2025-10-29 10:28:45 [http-nio-8084-exec-10] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 909, size: 8236 bytes +2025-10-29 10:28:46 [http-nio-8084-exec-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 910 +2025-10-29 10:28:46 [http-nio-8084-exec-1] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 910, size: 8236 bytes +2025-10-29 10:28:46 [http-nio-8084-exec-2] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 911 +2025-10-29 10:28:46 [http-nio-8084-exec-2] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 911, size: 8236 bytes +2025-10-29 10:28:46 [http-nio-8084-exec-3] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 912 +2025-10-29 10:28:46 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 912, size: 8236 bytes +2025-10-29 10:28:46 [http-nio-8084-exec-4] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 913 +2025-10-29 10:28:46 [http-nio-8084-exec-4] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 913, size: 8236 bytes +2025-10-29 10:28:46 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:28:46 [scheduling-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 조회 완료 - meetingId: test-meeting-001, count: 20 +2025-10-29 10:28:46 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 오디오 청크 조회 완료 - meetingId: test-meeting-001, chunks: 20개 +2025-10-29 10:28:46 [scheduling-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 병합 완료 - chunks: 20, totalSize: 164720 +2025-10-29 10:28:46 [scheduling-1] WARN c.u.h.stt.service.AzureSpeechService - Azure Speech Service 비활성화 - 시뮬레이션 결과 반환 +2025-10-29 10:28:46 [scheduling-1] INFO c.u.h.stt.service.AzureSpeechService - [시뮬레이션] 음성 인식 결과: 신제품 개발 일정에 대해 논의하고 있습니다. +2025-10-29 10:28:46 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - Event Hub 이벤트 발행 완료 - meetingId: test-meeting-001, text: 신제품 개발 일정에 대해 논의하고 있습니다. +2025-10-29 10:28:46 [ForkJoinPool.commonPool-worker-1] DEBUG c.u.h.s.e.p.EventHubPublisher - Event Hub 발행 시뮬레이션: +2025-10-29 10:28:46 [ForkJoinPool.commonPool-worker-1] DEBUG c.u.h.s.e.p.EventHubPublisher - Topic: transcription-events +2025-10-29 10:28:46 [ForkJoinPool.commonPool-worker-1] DEBUG c.u.h.s.e.p.EventHubPublisher - Event Data: {"eventId":"a678420e-90e1-41e6-9c25-ffd1fc8292bb","eventType":"SegmentCreated","segmentId":"f2a3bb9c-f9c0-4e5d-99ad-693da2394fd0","recordingId":"test-meeting-001","meetingId":"test-meeting-001","text":"신제품 개발 일정에 대해 논의하고 있습니다.","speakerId":"UNKNOWN","speakerName":"참석자","timestamp":[2025,10,29,10,28,46,977411000],"duration":5.0,"confidence":0.85,"warningFlag":false,"eventTime":[2025,10,29,10,28,46,977443000]} +2025-10-29 10:28:46 [ForkJoinPool.commonPool-worker-1] INFO c.u.h.s.e.p.EventHubPublisher - 이벤트 발행 완료 - topic: transcription-events, event: SegmentCreated +2025-10-29 10:28:46 [scheduling-1] INFO c.u.h.s.c.AudioWebSocketHandler - STT 결과 전송 완료 - meetingId: test-meeting-001, sessions: 1개, text: 신제품 개발 일정에 대해 논의하고 있습니다. +2025-10-29 10:28:46 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - WebSocket 결과 전송 완료 - meetingId: test-meeting-001, text: 신제품 개발 일정에 대해 논의하고 있습니다. +2025-10-29 10:28:46 [scheduling-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 삭제 완료 - meetingId: test-meeting-001 +2025-10-29 10:28:46 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 회의 처리 완료 - meetingId: test-meeting-001, text: 신제품 개발 일정에 대해 논의하고 있습니다. +2025-10-29 10:28:46 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:28:47 [http-nio-8084-exec-5] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 914 +2025-10-29 10:28:47 [http-nio-8084-exec-5] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 914, size: 8236 bytes +2025-10-29 10:28:47 [http-nio-8084-exec-6] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 915 +2025-10-29 10:28:47 [http-nio-8084-exec-6] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 915, size: 8236 bytes +2025-10-29 10:28:47 [http-nio-8084-exec-7] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 916 +2025-10-29 10:28:47 [http-nio-8084-exec-7] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 916, size: 8236 bytes +2025-10-29 10:28:47 [http-nio-8084-exec-8] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 917 +2025-10-29 10:28:47 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 917, size: 8236 bytes +2025-10-29 10:28:48 [http-nio-8084-exec-9] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 918 +2025-10-29 10:28:48 [http-nio-8084-exec-9] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 918, size: 8236 bytes +2025-10-29 10:28:48 [http-nio-8084-exec-10] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 919 +2025-10-29 10:28:48 [http-nio-8084-exec-10] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 919, size: 8236 bytes +2025-10-29 10:28:48 [http-nio-8084-exec-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 920 +2025-10-29 10:28:48 [http-nio-8084-exec-1] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 920, size: 8236 bytes +2025-10-29 10:28:48 [http-nio-8084-exec-2] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 921 +2025-10-29 10:28:48 [http-nio-8084-exec-2] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 921, size: 8236 bytes +2025-10-29 10:28:49 [http-nio-8084-exec-3] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 922 +2025-10-29 10:28:49 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 922, size: 8236 bytes +2025-10-29 10:28:49 [http-nio-8084-exec-4] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 923 +2025-10-29 10:28:49 [http-nio-8084-exec-4] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 923, size: 8236 bytes +2025-10-29 10:28:49 [http-nio-8084-exec-5] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 924 +2025-10-29 10:28:49 [http-nio-8084-exec-5] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 924, size: 8236 bytes +2025-10-29 10:28:49 [http-nio-8084-exec-6] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 925 +2025-10-29 10:28:49 [http-nio-8084-exec-6] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 925, size: 8236 bytes +2025-10-29 10:28:50 [http-nio-8084-exec-7] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 926 +2025-10-29 10:28:50 [http-nio-8084-exec-7] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 926, size: 8236 bytes +2025-10-29 10:28:50 [http-nio-8084-exec-8] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 927 +2025-10-29 10:28:50 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 927, size: 8236 bytes +2025-10-29 10:28:50 [http-nio-8084-exec-9] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 928 +2025-10-29 10:28:50 [http-nio-8084-exec-9] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 928, size: 8236 bytes +2025-10-29 10:28:50 [http-nio-8084-exec-10] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 929 +2025-10-29 10:28:50 [http-nio-8084-exec-10] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 929, size: 8236 bytes +2025-10-29 10:28:51 [http-nio-8084-exec-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 930 +2025-10-29 10:28:51 [http-nio-8084-exec-1] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 930, size: 8236 bytes +2025-10-29 10:28:51 [http-nio-8084-exec-2] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 931 +2025-10-29 10:28:51 [http-nio-8084-exec-2] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 931, size: 8236 bytes +2025-10-29 10:28:51 [http-nio-8084-exec-3] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 932 +2025-10-29 10:28:51 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 932, size: 8236 bytes +2025-10-29 10:28:51 [http-nio-8084-exec-4] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 933 +2025-10-29 10:28:51 [http-nio-8084-exec-4] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 933, size: 8236 bytes +2025-10-29 10:28:52 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:28:52 [scheduling-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 조회 완료 - meetingId: test-meeting-001, count: 20 +2025-10-29 10:28:52 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 오디오 청크 조회 완료 - meetingId: test-meeting-001, chunks: 20개 +2025-10-29 10:28:52 [scheduling-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 병합 완료 - chunks: 20, totalSize: 164720 +2025-10-29 10:28:52 [scheduling-1] WARN c.u.h.stt.service.AzureSpeechService - Azure Speech Service 비활성화 - 시뮬레이션 결과 반환 +2025-10-29 10:28:52 [scheduling-1] INFO c.u.h.stt.service.AzureSpeechService - [시뮬레이션] 음성 인식 결과: 기술 스택 선정에 대한 의견을 나누고 있습니다. +2025-10-29 10:28:52 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - Event Hub 이벤트 발행 완료 - meetingId: test-meeting-001, text: 기술 스택 선정에 대한 의견을 나누고 있습니다. +2025-10-29 10:28:52 [ForkJoinPool.commonPool-worker-1] DEBUG c.u.h.s.e.p.EventHubPublisher - Event Hub 발행 시뮬레이션: +2025-10-29 10:28:52 [ForkJoinPool.commonPool-worker-1] DEBUG c.u.h.s.e.p.EventHubPublisher - Topic: transcription-events +2025-10-29 10:28:52 [ForkJoinPool.commonPool-worker-1] DEBUG c.u.h.s.e.p.EventHubPublisher - Event Data: {"eventId":"9db32a5a-a6f4-44b0-b4ab-3085c1342863","eventType":"SegmentCreated","segmentId":"0b004b63-a7db-41f4-bd47-ca086c2eec6b","recordingId":"test-meeting-001","meetingId":"test-meeting-001","text":"기술 스택 선정에 대한 의견을 나누고 있습니다.","speakerId":"UNKNOWN","speakerName":"참석자","timestamp":[2025,10,29,10,28,52,73677000],"duration":5.0,"confidence":0.85,"warningFlag":false,"eventTime":[2025,10,29,10,28,52,73700000]} +2025-10-29 10:28:52 [ForkJoinPool.commonPool-worker-1] INFO c.u.h.s.e.p.EventHubPublisher - 이벤트 발행 완료 - topic: transcription-events, event: SegmentCreated +2025-10-29 10:28:52 [scheduling-1] INFO c.u.h.s.c.AudioWebSocketHandler - STT 결과 전송 완료 - meetingId: test-meeting-001, sessions: 1개, text: 기술 스택 선정에 대한 의견을 나누고 있습니다. +2025-10-29 10:28:52 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - WebSocket 결과 전송 완료 - meetingId: test-meeting-001, text: 기술 스택 선정에 대한 의견을 나누고 있습니다. +2025-10-29 10:28:52 [scheduling-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 삭제 완료 - meetingId: test-meeting-001 +2025-10-29 10:28:52 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 회의 처리 완료 - meetingId: test-meeting-001, text: 기술 스택 선정에 대한 의견을 나누고 있습니다. +2025-10-29 10:28:52 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:28:52 [http-nio-8084-exec-5] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 934 +2025-10-29 10:28:52 [http-nio-8084-exec-5] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 934, size: 8236 bytes +2025-10-29 10:28:52 [http-nio-8084-exec-6] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 935 +2025-10-29 10:28:52 [http-nio-8084-exec-6] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 935, size: 8236 bytes +2025-10-29 10:28:52 [http-nio-8084-exec-7] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 936 +2025-10-29 10:28:52 [http-nio-8084-exec-7] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 936, size: 8236 bytes +2025-10-29 10:28:52 [http-nio-8084-exec-8] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 937 +2025-10-29 10:28:52 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 937, size: 8236 bytes +2025-10-29 10:28:53 [http-nio-8084-exec-9] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 938 +2025-10-29 10:28:53 [http-nio-8084-exec-9] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 938, size: 8236 bytes +2025-10-29 10:28:53 [http-nio-8084-exec-10] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 939 +2025-10-29 10:28:53 [http-nio-8084-exec-10] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 939, size: 8236 bytes +2025-10-29 10:28:53 [http-nio-8084-exec-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 940 +2025-10-29 10:28:53 [http-nio-8084-exec-1] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 940, size: 8236 bytes +2025-10-29 10:28:53 [http-nio-8084-exec-2] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 941 +2025-10-29 10:28:53 [http-nio-8084-exec-2] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 941, size: 8236 bytes +2025-10-29 10:28:54 [http-nio-8084-exec-3] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 942 +2025-10-29 10:28:54 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 942, size: 8236 bytes +2025-10-29 10:28:54 [http-nio-8084-exec-4] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 943 +2025-10-29 10:28:54 [http-nio-8084-exec-4] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 943, size: 8236 bytes +2025-10-29 10:28:54 [http-nio-8084-exec-5] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 944 +2025-10-29 10:28:54 [http-nio-8084-exec-5] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 944, size: 8236 bytes +2025-10-29 10:28:54 [http-nio-8084-exec-6] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 945 +2025-10-29 10:28:54 [http-nio-8084-exec-6] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 945, size: 8236 bytes +2025-10-29 10:28:55 [http-nio-8084-exec-7] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 946 +2025-10-29 10:28:55 [http-nio-8084-exec-7] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 946, size: 8236 bytes +2025-10-29 10:28:55 [http-nio-8084-exec-8] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 947 +2025-10-29 10:28:55 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 947, size: 8236 bytes +2025-10-29 10:28:55 [http-nio-8084-exec-9] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 948 +2025-10-29 10:28:55 [http-nio-8084-exec-9] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 948, size: 8236 bytes +2025-10-29 10:28:56 [http-nio-8084-exec-10] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 949 +2025-10-29 10:28:56 [http-nio-8084-exec-10] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 949, size: 8236 bytes +2025-10-29 10:28:56 [http-nio-8084-exec-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 950 +2025-10-29 10:28:56 [http-nio-8084-exec-1] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 950, size: 8236 bytes +2025-10-29 10:28:56 [http-nio-8084-exec-2] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 951 +2025-10-29 10:28:56 [http-nio-8084-exec-2] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 951, size: 8236 bytes +2025-10-29 10:28:56 [http-nio-8084-exec-3] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 952 +2025-10-29 10:28:56 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 952, size: 8236 bytes +2025-10-29 10:28:57 [http-nio-8084-exec-4] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 953 +2025-10-29 10:28:57 [http-nio-8084-exec-4] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 953, size: 8236 bytes +2025-10-29 10:28:57 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:28:57 [scheduling-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 조회 완료 - meetingId: test-meeting-001, count: 20 +2025-10-29 10:28:57 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 오디오 청크 조회 완료 - meetingId: test-meeting-001, chunks: 20개 +2025-10-29 10:28:57 [scheduling-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 병합 완료 - chunks: 20, totalSize: 164720 +2025-10-29 10:28:57 [scheduling-1] WARN c.u.h.stt.service.AzureSpeechService - Azure Speech Service 비활성화 - 시뮬레이션 결과 반환 +2025-10-29 10:28:57 [scheduling-1] INFO c.u.h.stt.service.AzureSpeechService - [시뮬레이션] 음성 인식 결과: 고객 피드백을 반영한 개선안을 검토 중입니다. +2025-10-29 10:28:57 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - Event Hub 이벤트 발행 완료 - meetingId: test-meeting-001, text: 고객 피드백을 반영한 개선안을 검토 중입니다. +2025-10-29 10:28:57 [ForkJoinPool.commonPool-worker-1] DEBUG c.u.h.s.e.p.EventHubPublisher - Event Hub 발행 시뮬레이션: +2025-10-29 10:28:57 [ForkJoinPool.commonPool-worker-1] DEBUG c.u.h.s.e.p.EventHubPublisher - Topic: transcription-events +2025-10-29 10:28:57 [ForkJoinPool.commonPool-worker-1] DEBUG c.u.h.s.e.p.EventHubPublisher - Event Data: {"eventId":"171d92e5-0578-4cd2-9f98-952b1d71b54c","eventType":"SegmentCreated","segmentId":"ad22eff1-d70e-40a0-a39c-7496f1bbde67","recordingId":"test-meeting-001","meetingId":"test-meeting-001","text":"고객 피드백을 반영한 개선안을 검토 중입니다.","speakerId":"UNKNOWN","speakerName":"참석자","timestamp":[2025,10,29,10,28,57,176299000],"duration":5.0,"confidence":0.85,"warningFlag":false,"eventTime":[2025,10,29,10,28,57,176307000]} +2025-10-29 10:28:57 [ForkJoinPool.commonPool-worker-1] INFO c.u.h.s.e.p.EventHubPublisher - 이벤트 발행 완료 - topic: transcription-events, event: SegmentCreated +2025-10-29 10:28:57 [scheduling-1] INFO c.u.h.s.c.AudioWebSocketHandler - STT 결과 전송 완료 - meetingId: test-meeting-001, sessions: 1개, text: 고객 피드백을 반영한 개선안을 검토 중입니다. +2025-10-29 10:28:57 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - WebSocket 결과 전송 완료 - meetingId: test-meeting-001, text: 고객 피드백을 반영한 개선안을 검토 중입니다. +2025-10-29 10:28:57 [scheduling-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 삭제 완료 - meetingId: test-meeting-001 +2025-10-29 10:28:57 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 회의 처리 완료 - meetingId: test-meeting-001, text: 고객 피드백을 반영한 개선안을 검토 중입니다. +2025-10-29 10:28:57 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:28:57 [http-nio-8084-exec-5] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 954 +2025-10-29 10:28:57 [http-nio-8084-exec-5] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 954, size: 8236 bytes +2025-10-29 10:28:57 [http-nio-8084-exec-6] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 955 +2025-10-29 10:28:57 [http-nio-8084-exec-6] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 955, size: 8236 bytes +2025-10-29 10:28:57 [http-nio-8084-exec-7] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 956 +2025-10-29 10:28:57 [http-nio-8084-exec-7] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 956, size: 8236 bytes +2025-10-29 10:28:58 [http-nio-8084-exec-8] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 957 +2025-10-29 10:28:58 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 957, size: 8236 bytes +2025-10-29 10:28:58 [http-nio-8084-exec-9] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 958 +2025-10-29 10:28:58 [http-nio-8084-exec-9] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 958, size: 8236 bytes +2025-10-29 10:28:58 [http-nio-8084-exec-10] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 959 +2025-10-29 10:28:58 [http-nio-8084-exec-10] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 959, size: 8236 bytes +2025-10-29 10:28:58 [http-nio-8084-exec-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 960 +2025-10-29 10:28:58 [http-nio-8084-exec-1] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 960, size: 8236 bytes +2025-10-29 10:28:59 [http-nio-8084-exec-2] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 961 +2025-10-29 10:28:59 [http-nio-8084-exec-2] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 961, size: 8236 bytes +2025-10-29 10:28:59 [http-nio-8084-exec-3] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 962 +2025-10-29 10:28:59 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 962, size: 8236 bytes +2025-10-29 10:28:59 [http-nio-8084-exec-4] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 963 +2025-10-29 10:28:59 [http-nio-8084-exec-4] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 963, size: 8236 bytes +2025-10-29 10:28:59 [http-nio-8084-exec-5] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 964 +2025-10-29 10:28:59 [http-nio-8084-exec-5] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 964, size: 8236 bytes +2025-10-29 10:29:00 [http-nio-8084-exec-6] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 965 +2025-10-29 10:29:00 [http-nio-8084-exec-6] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 965, size: 8236 bytes +2025-10-29 10:29:00 [http-nio-8084-exec-7] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 966 +2025-10-29 10:29:00 [http-nio-8084-exec-7] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 966, size: 8236 bytes +2025-10-29 10:29:00 [http-nio-8084-exec-8] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 967 +2025-10-29 10:29:00 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 967, size: 8236 bytes +2025-10-29 10:29:00 [http-nio-8084-exec-9] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 968 +2025-10-29 10:29:00 [http-nio-8084-exec-9] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 968, size: 8236 bytes +2025-10-29 10:29:01 [http-nio-8084-exec-10] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 969 +2025-10-29 10:29:01 [http-nio-8084-exec-10] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 969, size: 8236 bytes +2025-10-29 10:29:01 [http-nio-8084-exec-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 970 +2025-10-29 10:29:01 [http-nio-8084-exec-1] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 970, size: 8236 bytes +2025-10-29 10:29:01 [http-nio-8084-exec-2] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 971 +2025-10-29 10:29:01 [http-nio-8084-exec-2] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 971, size: 8236 bytes +2025-10-29 10:29:01 [http-nio-8084-exec-3] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 972 +2025-10-29 10:29:01 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 972, size: 8236 bytes +2025-10-29 10:29:02 [http-nio-8084-exec-4] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 973 +2025-10-29 10:29:02 [http-nio-8084-exec-4] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 973, size: 8236 bytes +2025-10-29 10:29:02 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:29:02 [scheduling-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 조회 완료 - meetingId: test-meeting-001, count: 20 +2025-10-29 10:29:02 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 오디오 청크 조회 완료 - meetingId: test-meeting-001, chunks: 20개 +2025-10-29 10:29:02 [scheduling-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 병합 완료 - chunks: 20, totalSize: 164720 +2025-10-29 10:29:02 [scheduling-1] WARN c.u.h.stt.service.AzureSpeechService - Azure Speech Service 비활성화 - 시뮬레이션 결과 반환 +2025-10-29 10:29:02 [scheduling-1] INFO c.u.h.stt.service.AzureSpeechService - [시뮬레이션] 음성 인식 결과: 고객 피드백을 반영한 개선안을 검토 중입니다. +2025-10-29 10:29:02 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - Event Hub 이벤트 발행 완료 - meetingId: test-meeting-001, text: 고객 피드백을 반영한 개선안을 검토 중입니다. +2025-10-29 10:29:02 [ForkJoinPool.commonPool-worker-1] DEBUG c.u.h.s.e.p.EventHubPublisher - Event Hub 발행 시뮬레이션: +2025-10-29 10:29:02 [ForkJoinPool.commonPool-worker-1] DEBUG c.u.h.s.e.p.EventHubPublisher - Topic: transcription-events +2025-10-29 10:29:02 [ForkJoinPool.commonPool-worker-1] DEBUG c.u.h.s.e.p.EventHubPublisher - Event Data: {"eventId":"3579052f-a26d-48de-a30f-a3aba36c7f49","eventType":"SegmentCreated","segmentId":"674f6c15-614d-4159-b2ad-7d06f2c3131a","recordingId":"test-meeting-001","meetingId":"test-meeting-001","text":"고객 피드백을 반영한 개선안을 검토 중입니다.","speakerId":"UNKNOWN","speakerName":"참석자","timestamp":[2025,10,29,10,29,2,283767000],"duration":5.0,"confidence":0.85,"warningFlag":false,"eventTime":[2025,10,29,10,29,2,283782000]} +2025-10-29 10:29:02 [ForkJoinPool.commonPool-worker-1] INFO c.u.h.s.e.p.EventHubPublisher - 이벤트 발행 완료 - topic: transcription-events, event: SegmentCreated +2025-10-29 10:29:02 [scheduling-1] INFO c.u.h.s.c.AudioWebSocketHandler - STT 결과 전송 완료 - meetingId: test-meeting-001, sessions: 1개, text: 고객 피드백을 반영한 개선안을 검토 중입니다. +2025-10-29 10:29:02 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - WebSocket 결과 전송 완료 - meetingId: test-meeting-001, text: 고객 피드백을 반영한 개선안을 검토 중입니다. +2025-10-29 10:29:02 [scheduling-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 삭제 완료 - meetingId: test-meeting-001 +2025-10-29 10:29:02 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 회의 처리 완료 - meetingId: test-meeting-001, text: 고객 피드백을 반영한 개선안을 검토 중입니다. +2025-10-29 10:29:02 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:29:02 [http-nio-8084-exec-5] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 974 +2025-10-29 10:29:02 [http-nio-8084-exec-5] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 974, size: 8236 bytes +2025-10-29 10:29:02 [http-nio-8084-exec-6] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 975 +2025-10-29 10:29:02 [http-nio-8084-exec-6] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 975, size: 8236 bytes +2025-10-29 10:29:02 [http-nio-8084-exec-7] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 976 +2025-10-29 10:29:02 [http-nio-8084-exec-7] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 976, size: 8236 bytes +2025-10-29 10:29:03 [http-nio-8084-exec-8] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 977 +2025-10-29 10:29:03 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 977, size: 8236 bytes +2025-10-29 10:29:03 [http-nio-8084-exec-9] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 978 +2025-10-29 10:29:03 [http-nio-8084-exec-9] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 978, size: 8236 bytes +2025-10-29 10:29:03 [http-nio-8084-exec-10] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 979 +2025-10-29 10:29:03 [http-nio-8084-exec-10] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 979, size: 8236 bytes +2025-10-29 10:29:03 [http-nio-8084-exec-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 980 +2025-10-29 10:29:03 [http-nio-8084-exec-1] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 980, size: 8236 bytes +2025-10-29 10:29:04 [http-nio-8084-exec-2] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 981 +2025-10-29 10:29:04 [http-nio-8084-exec-2] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 981, size: 8236 bytes +2025-10-29 10:29:04 [http-nio-8084-exec-3] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 982 +2025-10-29 10:29:04 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 982, size: 8236 bytes +2025-10-29 10:29:04 [http-nio-8084-exec-4] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 983 +2025-10-29 10:29:04 [http-nio-8084-exec-4] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 983, size: 8236 bytes +2025-10-29 10:29:04 [http-nio-8084-exec-5] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 984 +2025-10-29 10:29:04 [http-nio-8084-exec-5] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 984, size: 8236 bytes +2025-10-29 10:29:05 [http-nio-8084-exec-6] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 985 +2025-10-29 10:29:05 [http-nio-8084-exec-6] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 985, size: 8236 bytes +2025-10-29 10:29:05 [http-nio-8084-exec-7] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 986 +2025-10-29 10:29:05 [http-nio-8084-exec-7] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 986, size: 8236 bytes +2025-10-29 10:29:05 [http-nio-8084-exec-8] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 987 +2025-10-29 10:29:05 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 987, size: 8236 bytes +2025-10-29 10:29:05 [http-nio-8084-exec-9] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 988 +2025-10-29 10:29:05 [http-nio-8084-exec-9] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 988, size: 8236 bytes +2025-10-29 10:29:06 [http-nio-8084-exec-10] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 989 +2025-10-29 10:29:06 [http-nio-8084-exec-10] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 989, size: 8236 bytes +2025-10-29 10:29:06 [http-nio-8084-exec-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 990 +2025-10-29 10:29:06 [http-nio-8084-exec-1] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 990, size: 8236 bytes +2025-10-29 10:29:06 [http-nio-8084-exec-2] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 991 +2025-10-29 10:29:06 [http-nio-8084-exec-2] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 991, size: 8236 bytes +2025-10-29 10:29:07 [http-nio-8084-exec-3] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 992 +2025-10-29 10:29:07 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 992, size: 8236 bytes +2025-10-29 10:29:07 [http-nio-8084-exec-4] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 993 +2025-10-29 10:29:07 [http-nio-8084-exec-4] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 993, size: 8236 bytes +2025-10-29 10:29:07 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:29:07 [scheduling-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 조회 완료 - meetingId: test-meeting-001, count: 20 +2025-10-29 10:29:07 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 오디오 청크 조회 완료 - meetingId: test-meeting-001, chunks: 20개 +2025-10-29 10:29:07 [scheduling-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 병합 완료 - chunks: 20, totalSize: 164720 +2025-10-29 10:29:07 [scheduling-1] WARN c.u.h.stt.service.AzureSpeechService - Azure Speech Service 비활성화 - 시뮬레이션 결과 반환 +2025-10-29 10:29:07 [scheduling-1] INFO c.u.h.stt.service.AzureSpeechService - [시뮬레이션] 음성 인식 결과: 다음 주까지 프로토타입을 완성하기로 했습니다. +2025-10-29 10:29:07 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - Event Hub 이벤트 발행 완료 - meetingId: test-meeting-001, text: 다음 주까지 프로토타입을 완성하기로 했습니다. +2025-10-29 10:29:07 [ForkJoinPool.commonPool-worker-1] DEBUG c.u.h.s.e.p.EventHubPublisher - Event Hub 발행 시뮬레이션: +2025-10-29 10:29:07 [ForkJoinPool.commonPool-worker-1] DEBUG c.u.h.s.e.p.EventHubPublisher - Topic: transcription-events +2025-10-29 10:29:07 [ForkJoinPool.commonPool-worker-1] DEBUG c.u.h.s.e.p.EventHubPublisher - Event Data: {"eventId":"f27e0e68-4b61-4fac-affa-95c39f9996fd","eventType":"SegmentCreated","segmentId":"c6fc8deb-ba51-4daf-8b59-fba21b278603","recordingId":"test-meeting-001","meetingId":"test-meeting-001","text":"다음 주까지 프로토타입을 완성하기로 했습니다.","speakerId":"UNKNOWN","speakerName":"참석자","timestamp":[2025,10,29,10,29,7,428070000],"duration":5.0,"confidence":0.85,"warningFlag":false,"eventTime":[2025,10,29,10,29,7,428086000]} +2025-10-29 10:29:07 [ForkJoinPool.commonPool-worker-1] INFO c.u.h.s.e.p.EventHubPublisher - 이벤트 발행 완료 - topic: transcription-events, event: SegmentCreated +2025-10-29 10:29:07 [scheduling-1] INFO c.u.h.s.c.AudioWebSocketHandler - STT 결과 전송 완료 - meetingId: test-meeting-001, sessions: 1개, text: 다음 주까지 프로토타입을 완성하기로 했습니다. +2025-10-29 10:29:07 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - WebSocket 결과 전송 완료 - meetingId: test-meeting-001, text: 다음 주까지 프로토타입을 완성하기로 했습니다. +2025-10-29 10:29:07 [scheduling-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 삭제 완료 - meetingId: test-meeting-001 +2025-10-29 10:29:07 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 회의 처리 완료 - meetingId: test-meeting-001, text: 다음 주까지 프로토타입을 완성하기로 했습니다. +2025-10-29 10:29:07 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:29:07 [http-nio-8084-exec-5] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 994 +2025-10-29 10:29:07 [http-nio-8084-exec-5] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 994, size: 8236 bytes +2025-10-29 10:29:07 [http-nio-8084-exec-6] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 995 +2025-10-29 10:29:07 [http-nio-8084-exec-6] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 995, size: 8236 bytes +2025-10-29 10:29:08 [http-nio-8084-exec-7] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 996 +2025-10-29 10:29:08 [http-nio-8084-exec-7] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 996, size: 8236 bytes +2025-10-29 10:29:08 [http-nio-8084-exec-8] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 997 +2025-10-29 10:29:08 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 997, size: 8236 bytes +2025-10-29 10:29:08 [http-nio-8084-exec-9] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 998 +2025-10-29 10:29:08 [http-nio-8084-exec-9] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 998, size: 8236 bytes +2025-10-29 10:29:08 [http-nio-8084-exec-10] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 999 +2025-10-29 10:29:08 [http-nio-8084-exec-10] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 999, size: 8236 bytes +2025-10-29 10:29:09 [http-nio-8084-exec-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 1000 +2025-10-29 10:29:09 [http-nio-8084-exec-1] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 1000, size: 8236 bytes +2025-10-29 10:29:09 [http-nio-8084-exec-2] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 1001 +2025-10-29 10:29:09 [http-nio-8084-exec-2] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 1001, size: 8236 bytes +2025-10-29 10:29:09 [http-nio-8084-exec-3] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 1002 +2025-10-29 10:29:09 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 1002, size: 8236 bytes +2025-10-29 10:29:09 [http-nio-8084-exec-4] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 1003 +2025-10-29 10:29:09 [http-nio-8084-exec-4] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 1003, size: 8236 bytes +2025-10-29 10:29:10 [http-nio-8084-exec-5] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 1004 +2025-10-29 10:29:10 [http-nio-8084-exec-5] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 1004, size: 8236 bytes +2025-10-29 10:29:10 [http-nio-8084-exec-6] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 1005 +2025-10-29 10:29:10 [http-nio-8084-exec-6] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 1005, size: 8236 bytes +2025-10-29 10:29:10 [http-nio-8084-exec-7] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 1006 +2025-10-29 10:29:10 [http-nio-8084-exec-7] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 1006, size: 8236 bytes +2025-10-29 10:29:10 [http-nio-8084-exec-8] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 1007 +2025-10-29 10:29:10 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 1007, size: 8236 bytes +2025-10-29 10:29:11 [http-nio-8084-exec-9] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 1008 +2025-10-29 10:29:11 [http-nio-8084-exec-9] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 1008, size: 8236 bytes +2025-10-29 10:29:11 [http-nio-8084-exec-10] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 1009 +2025-10-29 10:29:11 [http-nio-8084-exec-10] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 1009, size: 8236 bytes +2025-10-29 10:29:11 [http-nio-8084-exec-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 1010 +2025-10-29 10:29:11 [http-nio-8084-exec-1] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 1010, size: 8236 bytes +2025-10-29 10:29:11 [http-nio-8084-exec-2] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 1011 +2025-10-29 10:29:11 [http-nio-8084-exec-2] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 1011, size: 8236 bytes +2025-10-29 10:29:12 [http-nio-8084-exec-3] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 1012 +2025-10-29 10:29:12 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 1012, size: 8236 bytes +2025-10-29 10:29:12 [http-nio-8084-exec-4] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 1013 +2025-10-29 10:29:12 [http-nio-8084-exec-4] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 1013, size: 8236 bytes +2025-10-29 10:29:12 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:29:12 [scheduling-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 조회 완료 - meetingId: test-meeting-001, count: 20 +2025-10-29 10:29:12 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 오디오 청크 조회 완료 - meetingId: test-meeting-001, chunks: 20개 +2025-10-29 10:29:12 [scheduling-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 병합 완료 - chunks: 20, totalSize: 164720 +2025-10-29 10:29:12 [scheduling-1] WARN c.u.h.stt.service.AzureSpeechService - Azure Speech Service 비활성화 - 시뮬레이션 결과 반환 +2025-10-29 10:29:12 [scheduling-1] INFO c.u.h.stt.service.AzureSpeechService - [시뮬레이션] 음성 인식 결과: 고객 피드백을 반영한 개선안을 검토 중입니다. +2025-10-29 10:29:12 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - Event Hub 이벤트 발행 완료 - meetingId: test-meeting-001, text: 고객 피드백을 반영한 개선안을 검토 중입니다. +2025-10-29 10:29:12 [ForkJoinPool.commonPool-worker-1] DEBUG c.u.h.s.e.p.EventHubPublisher - Event Hub 발행 시뮬레이션: +2025-10-29 10:29:12 [ForkJoinPool.commonPool-worker-1] DEBUG c.u.h.s.e.p.EventHubPublisher - Topic: transcription-events +2025-10-29 10:29:12 [ForkJoinPool.commonPool-worker-1] DEBUG c.u.h.s.e.p.EventHubPublisher - Event Data: {"eventId":"213a8421-9cb2-4c2a-8d61-49624380a4e5","eventType":"SegmentCreated","segmentId":"a4ab6c70-412b-4d37-b840-8910bc2b207e","recordingId":"test-meeting-001","meetingId":"test-meeting-001","text":"고객 피드백을 반영한 개선안을 검토 중입니다.","speakerId":"UNKNOWN","speakerName":"참석자","timestamp":[2025,10,29,10,29,12,540458000],"duration":5.0,"confidence":0.85,"warningFlag":false,"eventTime":[2025,10,29,10,29,12,540476000]} +2025-10-29 10:29:12 [ForkJoinPool.commonPool-worker-1] INFO c.u.h.s.e.p.EventHubPublisher - 이벤트 발행 완료 - topic: transcription-events, event: SegmentCreated +2025-10-29 10:29:12 [scheduling-1] INFO c.u.h.s.c.AudioWebSocketHandler - STT 결과 전송 완료 - meetingId: test-meeting-001, sessions: 1개, text: 고객 피드백을 반영한 개선안을 검토 중입니다. +2025-10-29 10:29:12 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - WebSocket 결과 전송 완료 - meetingId: test-meeting-001, text: 고객 피드백을 반영한 개선안을 검토 중입니다. +2025-10-29 10:29:12 [scheduling-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 삭제 완료 - meetingId: test-meeting-001 +2025-10-29 10:29:12 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 회의 처리 완료 - meetingId: test-meeting-001, text: 고객 피드백을 반영한 개선안을 검토 중입니다. +2025-10-29 10:29:12 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:29:12 [http-nio-8084-exec-5] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 1014 +2025-10-29 10:29:12 [http-nio-8084-exec-5] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 1014, size: 8236 bytes +2025-10-29 10:29:12 [http-nio-8084-exec-6] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 1015 +2025-10-29 10:29:12 [http-nio-8084-exec-6] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 1015, size: 8236 bytes +2025-10-29 10:29:13 [http-nio-8084-exec-7] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 1016 +2025-10-29 10:29:13 [http-nio-8084-exec-7] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 1016, size: 8236 bytes +2025-10-29 10:29:13 [http-nio-8084-exec-8] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 1017 +2025-10-29 10:29:13 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 1017, size: 8236 bytes +2025-10-29 10:29:14 [http-nio-8084-exec-8] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 1018 +2025-10-29 10:29:14 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 1018, size: 8236 bytes +2025-10-29 10:29:14 [http-nio-8084-exec-8] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 1019 +2025-10-29 10:29:14 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 1019, size: 8236 bytes +2025-10-29 10:29:14 [http-nio-8084-exec-8] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 1020 +2025-10-29 10:29:14 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 1020, size: 8236 bytes +2025-10-29 10:29:14 [http-nio-8084-exec-9] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 1021 +2025-10-29 10:29:14 [http-nio-8084-exec-9] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 1021, size: 8236 bytes +2025-10-29 10:29:14 [http-nio-8084-exec-10] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 1022 +2025-10-29 10:29:14 [http-nio-8084-exec-10] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 1022, size: 8236 bytes +2025-10-29 10:29:14 [http-nio-8084-exec-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 1023 +2025-10-29 10:29:14 [http-nio-8084-exec-1] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 1023, size: 8236 bytes +2025-10-29 10:29:15 [http-nio-8084-exec-2] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 1024 +2025-10-29 10:29:15 [http-nio-8084-exec-2] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 1024, size: 8236 bytes +2025-10-29 10:29:15 [http-nio-8084-exec-3] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 1025 +2025-10-29 10:29:15 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 1025, size: 8236 bytes +2025-10-29 10:29:15 [http-nio-8084-exec-4] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 1026 +2025-10-29 10:29:15 [http-nio-8084-exec-4] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 1026, size: 8236 bytes +2025-10-29 10:29:15 [http-nio-8084-exec-5] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 1027 +2025-10-29 10:29:15 [http-nio-8084-exec-5] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 1027, size: 8236 bytes +2025-10-29 10:29:16 [http-nio-8084-exec-6] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 1028 +2025-10-29 10:29:16 [http-nio-8084-exec-6] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 1028, size: 8236 bytes +2025-10-29 10:29:16 [http-nio-8084-exec-7] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 1029 +2025-10-29 10:29:16 [http-nio-8084-exec-7] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 1029, size: 8236 bytes +2025-10-29 10:29:16 [http-nio-8084-exec-8] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 1030 +2025-10-29 10:29:16 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 1030, size: 8236 bytes +2025-10-29 10:29:17 [http-nio-8084-exec-9] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 1031 +2025-10-29 10:29:17 [http-nio-8084-exec-9] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 1031, size: 8236 bytes +2025-10-29 10:29:17 [http-nio-8084-exec-10] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 1032 +2025-10-29 10:29:17 [http-nio-8084-exec-10] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 1032, size: 8236 bytes +2025-10-29 10:29:17 [SpringApplicationShutdownHook] INFO o.s.o.j.LocalContainerEntityManagerFactoryBean - Closing JPA EntityManagerFactory for persistence unit 'default' +2025-10-29 10:29:17 [SpringApplicationShutdownHook] TRACE o.h.type.spi.TypeConfiguration$Scope - Handling #sessionFactoryClosed from [org.hibernate.internal.SessionFactoryImpl@21b75073] for TypeConfiguration +2025-10-29 10:29:17 [SpringApplicationShutdownHook] DEBUG o.h.type.spi.TypeConfiguration$Scope - Un-scoping TypeConfiguration [org.hibernate.type.spi.TypeConfiguration$Scope@75aa2a11] from SessionFactory [org.hibernate.internal.SessionFactoryImpl@21b75073] +2025-10-29 10:29:17 [SpringApplicationShutdownHook] INFO com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Shutdown initiated... +2025-10-29 10:29:17 [SpringApplicationShutdownHook] INFO com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Shutdown completed. +2025-10-29 10:29:17 [SpringApplicationShutdownHook] ERROR c.u.h.s.c.AudioWebSocketHandler - WebSocket 전송 오류 - sessionId: f9467bfe-d2d6-d016-8e63-e53596cc2db6 +java.io.IOException: java.nio.channels.ClosedChannelException + at org.apache.tomcat.websocket.WsRemoteEndpointImplBase.sendMessageBlockInternal(WsRemoteEndpointImplBase.java:326) + at org.apache.tomcat.websocket.WsRemoteEndpointImplBase.sendMessageBlock(WsRemoteEndpointImplBase.java:266) + at org.apache.tomcat.websocket.WsSession.sendCloseMessage(WsSession.java:792) + at org.apache.tomcat.websocket.WsSession.doClose(WsSession.java:589) + at org.apache.tomcat.websocket.WsSession.doClose(WsSession.java:556) + at org.apache.tomcat.websocket.WsSession.close(WsSession.java:544) + at org.apache.tomcat.websocket.WsWebSocketContainer.destroy(WsWebSocketContainer.java:1024) + at org.apache.tomcat.websocket.server.WsContextListener.contextDestroyed(WsContextListener.java:46) + at org.apache.catalina.core.StandardContext.listenerStop(StandardContext.java:4039) + at org.apache.catalina.core.StandardContext.stopInternal(StandardContext.java:4648) + at org.apache.catalina.util.LifecycleBase.stop(LifecycleBase.java:231) + at org.apache.catalina.core.ContainerBase$StopChild.call(ContainerBase.java:1219) + at org.apache.catalina.core.ContainerBase$StopChild.call(ContainerBase.java:1208) + at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:317) + at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:75) + at java.base/java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:148) + at org.apache.catalina.core.ContainerBase.stopInternal(ContainerBase.java:814) + at org.apache.catalina.util.LifecycleBase.stop(LifecycleBase.java:231) + at org.apache.catalina.core.ContainerBase$StopChild.call(ContainerBase.java:1219) + at org.apache.catalina.core.ContainerBase$StopChild.call(ContainerBase.java:1208) + at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:317) + at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:75) + at java.base/java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:148) + at org.apache.catalina.core.ContainerBase.stopInternal(ContainerBase.java:814) + at org.apache.catalina.util.LifecycleBase.stop(LifecycleBase.java:231) + at org.apache.catalina.core.StandardService.stopInternal(StandardService.java:471) + at org.apache.catalina.util.LifecycleBase.stop(LifecycleBase.java:231) + at org.apache.catalina.core.StandardServer.stopInternal(StandardServer.java:915) + at org.apache.catalina.util.LifecycleBase.stop(LifecycleBase.java:231) + at org.apache.catalina.startup.Tomcat.stop(Tomcat.java:447) + at org.springframework.boot.web.embedded.tomcat.TomcatWebServer.stopTomcat(TomcatWebServer.java:301) + at org.springframework.boot.web.embedded.tomcat.TomcatWebServer.destroy(TomcatWebServer.java:374) + at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.doClose(ServletWebServerApplicationContext.java:177) + at org.springframework.context.support.AbstractApplicationContext.close(AbstractApplicationContext.java:1102) + at org.springframework.boot.SpringApplicationShutdownHook.closeAndWait(SpringApplicationShutdownHook.java:145) + at java.base/java.lang.Iterable.forEach(Iterable.java:75) + at org.springframework.boot.SpringApplicationShutdownHook.run(SpringApplicationShutdownHook.java:114) + at java.base/java.lang.Thread.run(Thread.java:1575) +Caused by: java.nio.channels.ClosedChannelException: null + at org.apache.tomcat.util.net.NioChannel$1.write(NioChannel.java:273) + at org.apache.tomcat.util.net.NioEndpoint$NioSocketWrapper$NioOperationState.run(NioEndpoint.java:1632) + at org.apache.tomcat.util.net.SocketWrapperBase$OperationState.start(SocketWrapperBase.java:1051) + at org.apache.tomcat.util.net.SocketWrapperBase.vectoredOperation(SocketWrapperBase.java:1440) + at org.apache.tomcat.util.net.SocketWrapperBase.write(SocketWrapperBase.java:1366) + at org.apache.tomcat.util.net.SocketWrapperBase.write(SocketWrapperBase.java:1337) + at org.apache.tomcat.websocket.server.WsRemoteEndpointImplServer.doWrite(WsRemoteEndpointImplServer.java:171) + at org.apache.tomcat.websocket.WsRemoteEndpointImplBase.writeMessagePart(WsRemoteEndpointImplBase.java:521) + at org.apache.tomcat.websocket.WsRemoteEndpointImplBase.sendMessageBlockInternal(WsRemoteEndpointImplBase.java:313) + ... 37 common frames omitted +2025-10-29 10:29:17 [SpringApplicationShutdownHook] INFO c.u.h.s.c.AudioWebSocketHandler - WebSocket 연결 종료 - sessionId: f9467bfe-d2d6-d016-8e63-e53596cc2db6, meetingId: test-meeting-001, status: CloseStatus[code=1001, reason=The web application is stopping] +2025-10-29 10:29:36 [Test worker] INFO c.u.hgzero.stt.SttApplicationTest - Starting SttApplicationTest using Java 23.0.2 with PID 52337 (started by jominseo in /Users/jominseo/HGZero/stt) +2025-10-29 10:29:36 [Test worker] INFO c.u.hgzero.stt.SttApplicationTest - The following 1 profile is active: "test" +2025-10-29 10:29:37 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration boolean -> org.hibernate.type.BasicTypeReference@476c137b +2025-10-29 10:29:37 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration boolean -> org.hibernate.type.BasicTypeReference@476c137b +2025-10-29 10:29:37 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Boolean -> org.hibernate.type.BasicTypeReference@476c137b +2025-10-29 10:29:37 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration numeric_boolean -> org.hibernate.type.BasicTypeReference@72c704f1 +2025-10-29 10:29:37 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration org.hibernate.type.NumericBooleanConverter -> org.hibernate.type.BasicTypeReference@72c704f1 +2025-10-29 10:29:37 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration true_false -> org.hibernate.type.BasicTypeReference@76f9e000 +2025-10-29 10:29:37 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration org.hibernate.type.TrueFalseConverter -> org.hibernate.type.BasicTypeReference@76f9e000 +2025-10-29 10:29:37 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration yes_no -> org.hibernate.type.BasicTypeReference@7612116b +2025-10-29 10:29:37 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration org.hibernate.type.YesNoConverter -> org.hibernate.type.BasicTypeReference@7612116b +2025-10-29 10:29:37 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration byte -> org.hibernate.type.BasicTypeReference@1c05097c +2025-10-29 10:29:37 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration byte -> org.hibernate.type.BasicTypeReference@1c05097c +2025-10-29 10:29:37 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Byte -> org.hibernate.type.BasicTypeReference@1c05097c +2025-10-29 10:29:37 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration binary -> org.hibernate.type.BasicTypeReference@562f6681 +2025-10-29 10:29:37 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration byte[] -> org.hibernate.type.BasicTypeReference@562f6681 +2025-10-29 10:29:37 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration [B -> org.hibernate.type.BasicTypeReference@562f6681 +2025-10-29 10:29:37 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration binary_wrapper -> org.hibernate.type.BasicTypeReference@6f6f65a4 +2025-10-29 10:29:37 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration wrapper-binary -> org.hibernate.type.BasicTypeReference@6f6f65a4 +2025-10-29 10:29:37 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration image -> org.hibernate.type.BasicTypeReference@990b86b +2025-10-29 10:29:37 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration blob -> org.hibernate.type.BasicTypeReference@3dea1ecc +2025-10-29 10:29:37 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.sql.Blob -> org.hibernate.type.BasicTypeReference@3dea1ecc +2025-10-29 10:29:37 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration materialized_blob -> org.hibernate.type.BasicTypeReference@105c6c9e +2025-10-29 10:29:37 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration materialized_blob_wrapper -> org.hibernate.type.BasicTypeReference@40a7974 +2025-10-29 10:29:37 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration short -> org.hibernate.type.BasicTypeReference@8d5da7e +2025-10-29 10:29:37 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration short -> org.hibernate.type.BasicTypeReference@8d5da7e +2025-10-29 10:29:37 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Short -> org.hibernate.type.BasicTypeReference@8d5da7e +2025-10-29 10:29:37 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration integer -> org.hibernate.type.BasicTypeReference@65a4b9d6 +2025-10-29 10:29:37 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration int -> org.hibernate.type.BasicTypeReference@65a4b9d6 +2025-10-29 10:29:37 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Integer -> org.hibernate.type.BasicTypeReference@65a4b9d6 +2025-10-29 10:29:37 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration long -> org.hibernate.type.BasicTypeReference@16ef1160 +2025-10-29 10:29:37 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration long -> org.hibernate.type.BasicTypeReference@16ef1160 +2025-10-29 10:29:37 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Long -> org.hibernate.type.BasicTypeReference@16ef1160 +2025-10-29 10:29:37 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration float -> org.hibernate.type.BasicTypeReference@41f90b10 +2025-10-29 10:29:37 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration float -> org.hibernate.type.BasicTypeReference@41f90b10 +2025-10-29 10:29:37 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Float -> org.hibernate.type.BasicTypeReference@41f90b10 +2025-10-29 10:29:37 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration double -> org.hibernate.type.BasicTypeReference@67593f7b +2025-10-29 10:29:37 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration double -> org.hibernate.type.BasicTypeReference@67593f7b +2025-10-29 10:29:37 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Double -> org.hibernate.type.BasicTypeReference@67593f7b +2025-10-29 10:29:37 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration big_integer -> org.hibernate.type.BasicTypeReference@2773504f +2025-10-29 10:29:37 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.math.BigInteger -> org.hibernate.type.BasicTypeReference@2773504f +2025-10-29 10:29:37 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration big_decimal -> org.hibernate.type.BasicTypeReference@497921d0 +2025-10-29 10:29:37 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.math.BigDecimal -> org.hibernate.type.BasicTypeReference@497921d0 +2025-10-29 10:29:37 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration character -> org.hibernate.type.BasicTypeReference@40d10264 +2025-10-29 10:29:37 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration char -> org.hibernate.type.BasicTypeReference@40d10264 +2025-10-29 10:29:37 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Character -> org.hibernate.type.BasicTypeReference@40d10264 +2025-10-29 10:29:37 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration character_nchar -> org.hibernate.type.BasicTypeReference@6edd4fe2 +2025-10-29 10:29:37 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration string -> org.hibernate.type.BasicTypeReference@53918b5e +2025-10-29 10:29:37 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.String -> org.hibernate.type.BasicTypeReference@53918b5e +2025-10-29 10:29:37 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration nstring -> org.hibernate.type.BasicTypeReference@5366575d +2025-10-29 10:29:37 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration characters -> org.hibernate.type.BasicTypeReference@1b6cad77 +2025-10-29 10:29:37 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration char[] -> org.hibernate.type.BasicTypeReference@1b6cad77 +2025-10-29 10:29:37 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration [C -> org.hibernate.type.BasicTypeReference@1b6cad77 +2025-10-29 10:29:37 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration wrapper-characters -> org.hibernate.type.BasicTypeReference@1fca53a7 +2025-10-29 10:29:37 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration text -> org.hibernate.type.BasicTypeReference@40dee07b +2025-10-29 10:29:37 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration ntext -> org.hibernate.type.BasicTypeReference@21e39b82 +2025-10-29 10:29:37 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration clob -> org.hibernate.type.BasicTypeReference@5f9a8ddc +2025-10-29 10:29:37 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.sql.Clob -> org.hibernate.type.BasicTypeReference@5f9a8ddc +2025-10-29 10:29:37 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration nclob -> org.hibernate.type.BasicTypeReference@1280bae3 +2025-10-29 10:29:37 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.sql.NClob -> org.hibernate.type.BasicTypeReference@1280bae3 +2025-10-29 10:29:37 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration materialized_clob -> org.hibernate.type.BasicTypeReference@256a5df0 +2025-10-29 10:29:37 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration materialized_clob_char_array -> org.hibernate.type.BasicTypeReference@1868ed54 +2025-10-29 10:29:37 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration materialized_clob_character_array -> org.hibernate.type.BasicTypeReference@131777e8 +2025-10-29 10:29:37 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration materialized_nclob -> org.hibernate.type.BasicTypeReference@45790cb +2025-10-29 10:29:37 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration materialized_nclob_character_array -> org.hibernate.type.BasicTypeReference@73a5d86c +2025-10-29 10:29:37 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration materialized_nclob_char_array -> org.hibernate.type.BasicTypeReference@2cf88901 +2025-10-29 10:29:37 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration Duration -> org.hibernate.type.BasicTypeReference@4780341 +2025-10-29 10:29:37 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.Duration -> org.hibernate.type.BasicTypeReference@4780341 +2025-10-29 10:29:37 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration LocalDateTime -> org.hibernate.type.BasicTypeReference@3c910acd +2025-10-29 10:29:37 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.LocalDateTime -> org.hibernate.type.BasicTypeReference@3c910acd +2025-10-29 10:29:37 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration LocalDate -> org.hibernate.type.BasicTypeReference@612ac38b +2025-10-29 10:29:37 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.LocalDate -> org.hibernate.type.BasicTypeReference@612ac38b +2025-10-29 10:29:37 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration LocalTime -> org.hibernate.type.BasicTypeReference@9f2fe2e +2025-10-29 10:29:37 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.LocalTime -> org.hibernate.type.BasicTypeReference@9f2fe2e +2025-10-29 10:29:37 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration OffsetDateTime -> org.hibernate.type.BasicTypeReference@4dd4965a +2025-10-29 10:29:37 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.OffsetDateTime -> org.hibernate.type.BasicTypeReference@4dd4965a +2025-10-29 10:29:37 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration OffsetDateTimeWithTimezone -> org.hibernate.type.BasicTypeReference@79273a4f +2025-10-29 10:29:37 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration OffsetDateTimeWithoutTimezone -> org.hibernate.type.BasicTypeReference@4e26987b +2025-10-29 10:29:37 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration OffsetTime -> org.hibernate.type.BasicTypeReference@50bb1c1f +2025-10-29 10:29:37 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.OffsetTime -> org.hibernate.type.BasicTypeReference@50bb1c1f +2025-10-29 10:29:37 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration OffsetTimeUtc -> org.hibernate.type.BasicTypeReference@39342614 +2025-10-29 10:29:37 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration OffsetTimeWithTimezone -> org.hibernate.type.BasicTypeReference@7981963f +2025-10-29 10:29:37 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration OffsetTimeWithoutTimezone -> org.hibernate.type.BasicTypeReference@31e3c34 +2025-10-29 10:29:37 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration ZonedDateTime -> org.hibernate.type.BasicTypeReference@b4d83ac +2025-10-29 10:29:37 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.ZonedDateTime -> org.hibernate.type.BasicTypeReference@b4d83ac +2025-10-29 10:29:37 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration ZonedDateTimeWithTimezone -> org.hibernate.type.BasicTypeReference@13d10057 +2025-10-29 10:29:37 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration ZonedDateTimeWithoutTimezone -> org.hibernate.type.BasicTypeReference@66944c7c +2025-10-29 10:29:37 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration date -> org.hibernate.type.BasicTypeReference@14993306 +2025-10-29 10:29:37 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.sql.Date -> org.hibernate.type.BasicTypeReference@14993306 +2025-10-29 10:29:37 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration time -> org.hibernate.type.BasicTypeReference@73ae82da +2025-10-29 10:29:37 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.sql.Time -> org.hibernate.type.BasicTypeReference@73ae82da +2025-10-29 10:29:37 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration timestamp -> org.hibernate.type.BasicTypeReference@6866e740 +2025-10-29 10:29:37 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.sql.Timestamp -> org.hibernate.type.BasicTypeReference@6866e740 +2025-10-29 10:29:37 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.util.Date -> org.hibernate.type.BasicTypeReference@6866e740 +2025-10-29 10:29:37 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration calendar -> org.hibernate.type.BasicTypeReference@2cd5b19c +2025-10-29 10:29:37 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.util.Calendar -> org.hibernate.type.BasicTypeReference@2cd5b19c +2025-10-29 10:29:37 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.util.GregorianCalendar -> org.hibernate.type.BasicTypeReference@2cd5b19c +2025-10-29 10:29:37 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration calendar_date -> org.hibernate.type.BasicTypeReference@7109b603 +2025-10-29 10:29:37 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration calendar_time -> org.hibernate.type.BasicTypeReference@76b642aa +2025-10-29 10:29:37 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration instant -> org.hibernate.type.BasicTypeReference@29b5e7db +2025-10-29 10:29:37 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.Instant -> org.hibernate.type.BasicTypeReference@29b5e7db +2025-10-29 10:29:37 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration uuid -> org.hibernate.type.BasicTypeReference@286dfa20 +2025-10-29 10:29:37 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.util.UUID -> org.hibernate.type.BasicTypeReference@286dfa20 +2025-10-29 10:29:37 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration pg-uuid -> org.hibernate.type.BasicTypeReference@286dfa20 +2025-10-29 10:29:37 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration uuid-binary -> org.hibernate.type.BasicTypeReference@1468e880 +2025-10-29 10:29:37 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration uuid-char -> org.hibernate.type.BasicTypeReference@508f4bb5 +2025-10-29 10:29:37 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration class -> org.hibernate.type.BasicTypeReference@5602e540 +2025-10-29 10:29:37 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Class -> org.hibernate.type.BasicTypeReference@5602e540 +2025-10-29 10:29:37 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration currency -> org.hibernate.type.BasicTypeReference@11f9b95a +2025-10-29 10:29:37 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration Currency -> org.hibernate.type.BasicTypeReference@11f9b95a +2025-10-29 10:29:37 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.util.Currency -> org.hibernate.type.BasicTypeReference@11f9b95a +2025-10-29 10:29:37 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration locale -> org.hibernate.type.BasicTypeReference@42066f0d +2025-10-29 10:29:37 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.util.Locale -> org.hibernate.type.BasicTypeReference@42066f0d +2025-10-29 10:29:37 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration serializable -> org.hibernate.type.BasicTypeReference@687e561b +2025-10-29 10:29:37 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.io.Serializable -> org.hibernate.type.BasicTypeReference@687e561b +2025-10-29 10:29:37 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration timezone -> org.hibernate.type.BasicTypeReference@299786b1 +2025-10-29 10:29:37 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.util.TimeZone -> org.hibernate.type.BasicTypeReference@299786b1 +2025-10-29 10:29:37 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration ZoneOffset -> org.hibernate.type.BasicTypeReference@75f8d9b0 +2025-10-29 10:29:37 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.ZoneOffset -> org.hibernate.type.BasicTypeReference@75f8d9b0 +2025-10-29 10:29:37 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration url -> org.hibernate.type.BasicTypeReference@4f7ae05 +2025-10-29 10:29:37 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.net.URL -> org.hibernate.type.BasicTypeReference@4f7ae05 +2025-10-29 10:29:37 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration vector -> org.hibernate.type.BasicTypeReference@1e23ee0e +2025-10-29 10:29:37 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration row_version -> org.hibernate.type.BasicTypeReference@b144175 +2025-10-29 10:29:37 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration object -> org.hibernate.type.JavaObjectType@55f6f965 +2025-10-29 10:29:37 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Object -> org.hibernate.type.JavaObjectType@55f6f965 +2025-10-29 10:29:37 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration null -> org.hibernate.type.NullType@257b3561 +2025-10-29 10:29:37 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration imm_date -> org.hibernate.type.BasicTypeReference@78861d9e +2025-10-29 10:29:37 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration imm_time -> org.hibernate.type.BasicTypeReference@6a878778 +2025-10-29 10:29:37 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration imm_timestamp -> org.hibernate.type.BasicTypeReference@1eabfad5 +2025-10-29 10:29:37 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration imm_calendar -> org.hibernate.type.BasicTypeReference@6207145c +2025-10-29 10:29:37 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration imm_calendar_date -> org.hibernate.type.BasicTypeReference@7ccf6114 +2025-10-29 10:29:37 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration imm_calendar_time -> org.hibernate.type.BasicTypeReference@3df3410a +2025-10-29 10:29:37 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration imm_binary -> org.hibernate.type.BasicTypeReference@670c171c +2025-10-29 10:29:37 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration imm_serializable -> org.hibernate.type.BasicTypeReference@61d42275 +2025-10-29 10:29:37 [Test worker] INFO com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Starting... +2025-10-29 10:29:37 [Test worker] INFO com.zaxxer.hikari.pool.HikariPool - HikariPool-1 - Added connection conn0: url=jdbc:h2:mem:testdb user=SA +2025-10-29 10:29:37 [Test worker] INFO com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Start completed. +2025-10-29 10:29:37 [Test worker] WARN org.hibernate.orm.deprecation - HHH90000025: H2Dialect does not need to be specified explicitly using 'hibernate.dialect' (remove the property setting and it will be selected by default) +2025-10-29 10:29:37 [Test worker] DEBUG o.h.t.d.jdbc.spi.JdbcTypeRegistry - addDescriptor(NCharTypeDescriptor) replaced previous registration(CharTypeDescriptor) +2025-10-29 10:29:37 [Test worker] DEBUG o.h.t.d.jdbc.spi.JdbcTypeRegistry - addDescriptor(NVarcharTypeDescriptor) replaced previous registration(VarcharTypeDescriptor) +2025-10-29 10:29:37 [Test worker] DEBUG o.h.t.d.jdbc.spi.JdbcTypeRegistry - addDescriptor(LongNVarcharTypeDescriptor) replaced previous registration(LongVarcharTypeDescriptor) +2025-10-29 10:29:37 [Test worker] DEBUG o.h.t.d.jdbc.spi.JdbcTypeRegistry - addDescriptor(NClobTypeDescriptor(DEFAULT)) replaced previous registration(ClobTypeDescriptor(DEFAULT)) +2025-10-29 10:29:37 [Test worker] DEBUG o.h.t.d.jdbc.spi.JdbcTypeRegistry - addDescriptor(2005, ClobTypeDescriptor(STREAM_BINDING)) replaced previous registration(ClobTypeDescriptor(DEFAULT)) +2025-10-29 10:29:37 [Test worker] DEBUG o.h.t.d.jdbc.spi.JdbcTypeRegistry - addDescriptor(TimestampUtcDescriptor) replaced previous registration(TimestampUtcDescriptor) +2025-10-29 10:29:37 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration org.hibernate.type.DurationType -> basicType@1(java.time.Duration,3015) +2025-10-29 10:29:37 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration Duration -> basicType@1(java.time.Duration,3015) +2025-10-29 10:29:37 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.Duration -> basicType@1(java.time.Duration,3015) +2025-10-29 10:29:37 [Test worker] DEBUG o.h.type.spi.TypeConfiguration$Scope - Scoping TypeConfiguration [org.hibernate.type.spi.TypeConfiguration@7aaf6bfd] to MetadataBuildingContext [org.hibernate.boot.internal.MetadataBuildingContextRootImpl@4a8bf1dc] +2025-10-29 10:29:37 [Test worker] DEBUG o.h.type.spi.TypeConfiguration$Scope - Scoping TypeConfiguration [org.hibernate.type.spi.TypeConfiguration@7aaf6bfd] to SessionFactoryImplementor [org.hibernate.internal.SessionFactoryImpl@3d00c2ae] +2025-10-29 10:29:37 [Test worker] DEBUG org.hibernate.SQL - + drop table if exists recordings cascade +2025-10-29 10:29:37 [Test worker] DEBUG org.hibernate.SQL - + drop table if exists transcript_segments cascade +2025-10-29 10:29:37 [Test worker] DEBUG org.hibernate.SQL - + drop table if exists transcriptions cascade +2025-10-29 10:29:37 [Test worker] DEBUG org.hibernate.SQL - + create table recordings ( + duration integer, + segment_count integer, + speaker_count integer, + created_at timestamp(6) not null, + end_time timestamp(6), + start_time timestamp(6), + updated_at timestamp(6) not null, + language varchar(10) not null, + meeting_id varchar(50) not null, + recording_id varchar(50) not null, + session_id varchar(50) not null, + status enum ('COMPLETED','ERROR','READY','RECORDING','STOPPED') not null, + primary key (recording_id) + ) +2025-10-29 10:29:37 [Test worker] DEBUG org.hibernate.SQL - + create table transcript_segments ( + chunk_index integer, + confidence float(53), + duration float(53), + warning_flag boolean, + created_at timestamp(6) not null, + timestamp bigint not null, + updated_at timestamp(6) not null, + recording_id varchar(50) not null, + segment_id varchar(50) not null, + speaker_id varchar(50), + transcript_id varchar(50), + speaker_name varchar(100), + text TEXT not null, + primary key (segment_id) + ) +2025-10-29 10:29:37 [Test worker] DEBUG org.hibernate.SQL - + create table transcriptions ( + average_confidence float(53), + segment_count integer, + speaker_count integer, + total_duration integer, + completed_at timestamp(6), + created_at timestamp(6) not null, + updated_at timestamp(6) not null, + recording_id varchar(50) not null, + transcript_id varchar(50) not null, + full_text TEXT, + primary key (transcript_id) + ) +2025-10-29 10:29:37 [Test worker] TRACE o.h.type.spi.TypeConfiguration$Scope - Handling #sessionFactoryCreated from [org.hibernate.internal.SessionFactoryImpl@3d00c2ae] for TypeConfiguration +2025-10-29 10:29:37 [Test worker] ERROR i.n.r.d.DnsServerAddressStreamProviders - Unable to load io.netty.resolver.dns.macos.MacOSDnsServerAddressStreamProvider, fallback to system defaults. This may result in incorrect DNS resolutions on MacOS. Check whether you have a dependency on 'io.netty:netty-resolver-dns-native-macos'. Use DEBUG level to see the full stack: java.lang.UnsatisfiedLinkError: failed to load the required native library +2025-10-29 10:29:38 [Test worker] INFO c.u.h.stt.service.AzureSpeechService - Azure Speech Service 초기화 완료 - Region: eastus, Language: ko-KR +2025-10-29 10:29:39 [Test worker] WARN o.s.b.a.s.s.UserDetailsServiceAutoConfiguration - + +Using generated security password: 2954be5c-fd9e-4694-9f58-596f8dbd3991 + +This generated password is for development use only. Your security configuration must be updated before running your application in production. + +2025-10-29 10:29:39 [Test worker] WARN o.s.c.a.AnnotationConfigApplicationContext - Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'createWebSocketContainer' defined in class path resource [com/unicorn/hgzero/stt/config/WebSocketConfig.class]: A ServletContext is required to access the jakarta.websocket.server.ServerContainer instance +2025-10-29 10:29:39 [Test worker] INFO c.u.h.stt.service.AzureSpeechService - Azure Speech Service 종료 +2025-10-29 10:29:39 [Test worker] DEBUG org.hibernate.SQL - + drop table if exists recordings cascade +2025-10-29 10:29:39 [Test worker] DEBUG org.hibernate.SQL - + drop table if exists transcript_segments cascade +2025-10-29 10:29:39 [Test worker] DEBUG org.hibernate.SQL - + drop table if exists transcriptions cascade +2025-10-29 10:29:39 [Test worker] TRACE o.h.type.spi.TypeConfiguration$Scope - Handling #sessionFactoryClosed from [org.hibernate.internal.SessionFactoryImpl@3d00c2ae] for TypeConfiguration +2025-10-29 10:29:39 [Test worker] DEBUG o.h.type.spi.TypeConfiguration$Scope - Un-scoping TypeConfiguration [org.hibernate.type.spi.TypeConfiguration$Scope@6561629] from SessionFactory [org.hibernate.internal.SessionFactoryImpl@3d00c2ae] +2025-10-29 10:29:39 [Test worker] INFO com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Shutdown initiated... +2025-10-29 10:29:39 [Test worker] INFO com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Shutdown completed. +2025-10-29 10:29:39 [Test worker] ERROR o.s.boot.SpringApplication - Application run failed +org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'createWebSocketContainer' defined in class path resource [com/unicorn/hgzero/stt/config/WebSocketConfig.class]: A ServletContext is required to access the jakarta.websocket.server.ServerContainer instance + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1806) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:600) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:522) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:337) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:335) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:969) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:971) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:625) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:754) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:456) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:335) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:58) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:46) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1463) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:553) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:225) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:152) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:130) + at org.springframework.test.context.support.DependencyInjectionTestExecutionListener.injectDependencies(DependencyInjectionTestExecutionListener.java:142) + at org.springframework.test.context.support.DependencyInjectionTestExecutionListener.prepareTestInstance(DependencyInjectionTestExecutionListener.java:98) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:260) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:163) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:378) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:383) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:378) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:215) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:197) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1709) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:570) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:560) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:315) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:807) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:290) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:289) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:279) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:278) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:106) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:105) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:69) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:128) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:128) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1597) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:160) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:146) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:144) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:143) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:100) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1597) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:160) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:146) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:144) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:143) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:100) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103) + at java.base/java.lang.reflect.Method.invoke(Method.java:580) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:122) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:72) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: java.lang.IllegalStateException: A ServletContext is required to access the jakarta.websocket.server.ServerContainer instance + at org.springframework.util.Assert.state(Assert.java:76) + at org.springframework.web.socket.server.standard.ServletServerContainerFactoryBean.afterPropertiesSet(ServletServerContainerFactoryBean.java:113) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1853) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1802) + ... 105 common frames omitted +2025-10-29 10:29:39 [Test worker] WARN o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.support.DependencyInjectionTestExecutionListener] to prepare test instance [com.unicorn.hgzero.stt.SttApplicationTest@161e7cbc] +java.lang.IllegalStateException: Failed to load ApplicationContext for [MergedContextConfiguration@6850c02 testClass = com.unicorn.hgzero.stt.SttApplicationTest, locations = [], classes = [com.unicorn.hgzero.stt.SttApplication], contextInitializerClasses = [], activeProfiles = ["test"], propertySourceDescriptors = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true", "spring.main.web-application-type=none"], contextCustomizers = [org.springframework.boot.test.autoconfigure.OnFailureConditionReportContextCustomizerFactory$OnFailureConditionReportContextCustomizer@4da602fc, org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@1f, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizer@57eda880, [ImportsContextCustomizer@2aff6ec3 key = [com.unicorn.hgzero.stt.config.TestConfig]], org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@5af3a0f, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@72cf2de5, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@0, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@7b324585, org.springframework.boot.test.web.reactor.netty.DisableReactorResourceFactoryGlobalResourcesContextCustomizerFactory$DisableReactorResourceFactoryGlobalResourcesContextCustomizerCustomizer@47db5fa5, org.springframework.boot.test.context.SpringBootTestAnnotation@4f74f1a8], contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:180) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:130) + at org.springframework.test.context.support.DependencyInjectionTestExecutionListener.injectDependencies(DependencyInjectionTestExecutionListener.java:142) + at org.springframework.test.context.support.DependencyInjectionTestExecutionListener.prepareTestInstance(DependencyInjectionTestExecutionListener.java:98) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:260) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:163) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:378) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:383) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:378) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:215) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:197) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1709) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:570) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:560) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:315) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:807) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:290) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:289) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:279) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:278) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:106) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:105) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:69) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:128) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:128) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1597) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:160) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:146) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:144) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:143) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:100) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1597) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:160) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:146) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:144) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:143) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:100) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103) + at java.base/java.lang.reflect.Method.invoke(Method.java:580) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:122) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:72) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'createWebSocketContainer' defined in class path resource [com/unicorn/hgzero/stt/config/WebSocketConfig.class]: A ServletContext is required to access the jakarta.websocket.server.ServerContainer instance + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1806) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:600) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:522) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:337) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:335) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:969) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:971) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:625) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:754) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:456) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:335) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:58) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:46) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1463) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:553) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:225) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:152) + ... 84 common frames omitted +Caused by: java.lang.IllegalStateException: A ServletContext is required to access the jakarta.websocket.server.ServerContainer instance + at org.springframework.util.Assert.state(Assert.java:76) + at org.springframework.web.socket.server.standard.ServletServerContainerFactoryBean.afterPropertiesSet(ServletServerContainerFactoryBean.java:113) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1853) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1802) + ... 105 common frames omitted +2025-10-29 10:29:39 [Test worker] INFO c.u.h.s.c.RecordingControllerTest - Starting RecordingControllerTest using Java 23.0.2 with PID 52337 (started by jominseo in /Users/jominseo/HGZero/stt) +2025-10-29 10:29:39 [Test worker] DEBUG c.u.h.s.c.RecordingControllerTest - Running with Spring Boot v3.3.5, Spring v6.1.14 +2025-10-29 10:29:39 [Test worker] INFO c.u.h.s.c.RecordingControllerTest - No active profile set, falling back to 1 default profile: "default" +2025-10-29 10:29:39 [Test worker] INFO o.s.d.r.c.RepositoryConfigurationDelegate - Multiple Spring Data modules found, entering strict repository configuration mode +2025-10-29 10:29:39 [Test worker] INFO o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data JPA repositories in DEFAULT mode. +2025-10-29 10:29:39 [Test worker] INFO o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 1 ms. Found 3 JPA repository interfaces. +2025-10-29 10:29:39 [Test worker] WARN o.s.w.c.s.GenericWebApplicationContext - Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'jpaSharedEM_entityManagerFactory': Cannot resolve reference to bean 'entityManagerFactory' while setting constructor argument +2025-10-29 10:29:39 [Test worker] INFO o.s.b.a.l.ConditionEvaluationReportLogger - + +Error starting ApplicationContext. To display the condition evaluation report re-run your application with 'debug' enabled. +2025-10-29 10:29:39 [Test worker] ERROR o.s.b.d.LoggingFailureAnalysisReporter - + +*************************** +APPLICATION FAILED TO START +*************************** + +Description: + +A component required a bean named 'entityManagerFactory' that could not be found. + + +Action: + +Consider defining a bean named 'entityManagerFactory' in your configuration. + +2025-10-29 10:29:39 [Test worker] WARN o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.boot.test.mock.mockito.MockitoTestExecutionListener] to prepare test instance [com.unicorn.hgzero.stt.controller.RecordingControllerTest@7fa72332] +java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@2b8030c6 testClass = com.unicorn.hgzero.stt.controller.RecordingControllerTest, locations = [], classes = [com.unicorn.hgzero.stt.SttApplication], contextInitializerClasses = [], activeProfiles = [], propertySourceDescriptors = [], propertySourceProperties = ["org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.OnFailureConditionReportContextCustomizerFactory$OnFailureConditionReportContextCustomizer@4da602fc, org.springframework.boot.test.autoconfigure.OverrideAutoConfigurationContextCustomizerFactory$DisableAutoConfigurationContextCustomizer@772739ee, org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@1f, org.springframework.boot.test.autoconfigure.filter.TypeExcludeFiltersContextCustomizer@a2178532, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@312191ab, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizer@57eda880, [ImportsContextCustomizer@5fe8810d key = [org.springframework.boot.autoconfigure.task.TaskExecutionAutoConfiguration, org.springframework.boot.autoconfigure.cache.CacheAutoConfiguration, org.springframework.boot.autoconfigure.web.servlet.HttpEncodingAutoConfiguration, org.springframework.boot.autoconfigure.validation.ValidationAutoConfiguration, org.springframework.boot.autoconfigure.context.MessageSourceAutoConfiguration, org.springframework.boot.autoconfigure.hateoas.HypermediaAutoConfiguration, org.springframework.boot.autoconfigure.jackson.JacksonAutoConfiguration, org.springframework.boot.autoconfigure.data.web.SpringDataWebAutoConfiguration, org.springframework.boot.test.autoconfigure.web.reactive.WebTestClientAutoConfiguration, org.springframework.boot.autoconfigure.web.servlet.error.ErrorMvcAutoConfiguration, org.springframework.boot.test.autoconfigure.web.servlet.MockMvcAutoConfiguration, org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration, org.springframework.boot.autoconfigure.security.servlet.SecurityFilterAutoConfiguration, org.springframework.boot.autoconfigure.http.HttpMessageConvertersAutoConfiguration, org.springframework.boot.autoconfigure.security.oauth2.client.servlet.OAuth2ClientAutoConfiguration, org.springframework.boot.test.autoconfigure.web.servlet.MockMvcSecurityConfiguration, org.springframework.boot.test.autoconfigure.web.servlet.MockMvcWebClientAutoConfiguration, org.springframework.boot.test.autoconfigure.web.servlet.MockMvcWebDriverAutoConfiguration, org.springframework.boot.autoconfigure.thymeleaf.ThymeleafAutoConfiguration, org.springframework.boot.autoconfigure.gson.GsonAutoConfiguration, org.springframework.boot.autoconfigure.jsonb.JsonbAutoConfiguration, org.springframework.boot.autoconfigure.freemarker.FreeMarkerAutoConfiguration, org.springframework.boot.autoconfigure.web.servlet.WebMvcAutoConfiguration, org.springframework.boot.autoconfigure.security.servlet.UserDetailsServiceAutoConfiguration, org.springframework.boot.autoconfigure.security.oauth2.resource.servlet.OAuth2ResourceServerAutoConfiguration, org.springframework.boot.autoconfigure.groovy.template.GroovyTemplateAutoConfiguration, org.springframework.boot.autoconfigure.mustache.MustacheAutoConfiguration]], org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@5af3a0f, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@72cf2de5, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@de7c9eb0, org.springframework.boot.test.web.reactor.netty.DisableReactorResourceFactoryGlobalResourcesContextCustomizerFactory$DisableReactorResourceFactoryGlobalResourcesContextCustomizerCustomizer@47db5fa5, org.springframework.boot.test.context.SpringBootTestAnnotation@4f74f1a8], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:180) ~[spring-test-6.1.14.jar:6.1.14] + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:130) ~[spring-test-6.1.14.jar:6.1.14] + at org.springframework.boot.test.mock.mockito.MockitoTestExecutionListener.postProcessFields(MockitoTestExecutionListener.java:122) ~[spring-boot-test-3.3.5.jar:3.3.5] + at org.springframework.boot.test.mock.mockito.MockitoTestExecutionListener.injectFields(MockitoTestExecutionListener.java:106) ~[spring-boot-test-3.3.5.jar:3.3.5] + at org.springframework.boot.test.mock.mockito.MockitoTestExecutionListener.prepareTestInstance(MockitoTestExecutionListener.java:63) ~[spring-boot-test-3.3.5.jar:3.3.5] + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:260) ~[spring-test-6.1.14.jar:6.1.14] + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:163) ~[spring-test-6.1.14.jar:6.1.14] + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:378) ~[junit-jupiter-engine-5.10.5.jar:5.10.5] + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:383) ~[junit-jupiter-engine-5.10.5.jar:5.10.5] + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:378) ~[junit-jupiter-engine-5.10.5.jar:5.10.5] + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:215) ~[na:na] + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:197) ~[na:na] + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1709) ~[na:na] + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:570) ~[na:na] + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:560) ~[na:na] + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:315) ~[na:na] + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) ~[na:na] + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) ~[na:na] + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:807) ~[na:na] + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:377) ~[junit-jupiter-engine-5.10.5.jar:5.10.5] + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:290) ~[junit-jupiter-engine-5.10.5.jar:5.10.5] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:289) ~[junit-jupiter-engine-5.10.5.jar:5.10.5] + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:279) ~[junit-jupiter-engine-5.10.5.jar:5.10.5] + at java.base/java.util.Optional.orElseGet(Optional.java:364) ~[na:na] + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:278) ~[junit-jupiter-engine-5.10.5.jar:5.10.5] + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) ~[junit-jupiter-engine-5.10.5.jar:5.10.5] + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:106) ~[junit-jupiter-engine-5.10.5.jar:5.10.5] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:105) ~[junit-jupiter-engine-5.10.5.jar:5.10.5] + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:69) ~[junit-jupiter-engine-5.10.5.jar:5.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:128) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:128) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at java.base/java.util.ArrayList.forEach(ArrayList.java:1597) ~[na:na] + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:160) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:146) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:144) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:143) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:100) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at java.base/java.util.ArrayList.forEach(ArrayList.java:1597) ~[na:na] + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:160) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:146) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:144) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:143) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:100) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) ~[junit-platform-launcher-1.8.2.jar:1.8.2] + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) ~[junit-platform-launcher-1.8.2.jar:1.8.2] + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) ~[junit-platform-launcher-1.8.2.jar:1.8.2] + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) ~[junit-platform-launcher-1.8.2.jar:1.8.2] + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) ~[junit-platform-launcher-1.8.2.jar:1.8.2] + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) ~[junit-platform-launcher-1.8.2.jar:1.8.2] + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) ~[junit-platform-launcher-1.8.2.jar:1.8.2] + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) ~[junit-platform-launcher-1.8.2.jar:1.8.2] + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) ~[na:na] + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) ~[na:na] + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) ~[na:na] + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) ~[na:na] + at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103) ~[na:na] + at java.base/java.lang.reflect.Method.invoke(Method.java:580) ~[na:na] + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) ~[na:na] + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) ~[na:na] + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) ~[na:na] + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) ~[na:na] + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) ~[na:na] + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) ~[na:na] + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) ~[na:na] + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) ~[na:na] + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) ~[na:na] + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) ~[na:na] + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:122) ~[na:na] + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:72) ~[na:na] + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) ~[gradle-worker.jar:na] + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) ~[gradle-worker.jar:na] +Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'jpaSharedEM_entityManagerFactory': Cannot resolve reference to bean 'entityManagerFactory' while setting constructor argument + at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:377) ~[spring-beans-6.1.14.jar:6.1.14] + at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:135) ~[spring-beans-6.1.14.jar:6.1.14] + at org.springframework.beans.factory.support.ConstructorResolver.resolveConstructorArguments(ConstructorResolver.java:682) ~[spring-beans-6.1.14.jar:6.1.14] + at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:509) ~[spring-beans-6.1.14.jar:6.1.14] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1355) ~[spring-beans-6.1.14.jar:6.1.14] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1185) ~[spring-beans-6.1.14.jar:6.1.14] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:562) ~[spring-beans-6.1.14.jar:6.1.14] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:522) ~[spring-beans-6.1.14.jar:6.1.14] + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:337) ~[spring-beans-6.1.14.jar:6.1.14] + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) ~[spring-beans-6.1.14.jar:6.1.14] + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:335) ~[spring-beans-6.1.14.jar:6.1.14] + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) ~[spring-beans-6.1.14.jar:6.1.14] + at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:975) ~[spring-beans-6.1.14.jar:6.1.14] + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:971) ~[spring-context-6.1.14.jar:6.1.14] + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:625) ~[spring-context-6.1.14.jar:6.1.14] + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:754) ~[spring-boot-3.3.5.jar:3.3.5] + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:456) ~[spring-boot-3.3.5.jar:3.3.5] + at org.springframework.boot.SpringApplication.run(SpringApplication.java:335) ~[spring-boot-3.3.5.jar:3.3.5] + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) ~[spring-boot-test-3.3.5.jar:3.3.5] + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:58) ~[spring-core-6.1.14.jar:6.1.14] + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:46) ~[spring-core-6.1.14.jar:6.1.14] + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1463) ~[spring-boot-3.3.5.jar:3.3.5] + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:553) ~[spring-boot-test-3.3.5.jar:3.3.5] + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) ~[spring-boot-test-3.3.5.jar:3.3.5] + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) ~[spring-boot-test-3.3.5.jar:3.3.5] + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:225) ~[spring-test-6.1.14.jar:6.1.14] + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:152) ~[spring-test-6.1.14.jar:6.1.14] + ... 85 common frames omitted +Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'entityManagerFactory' available + at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeanDefinition(DefaultListableBeanFactory.java:895) ~[spring-beans-6.1.14.jar:6.1.14] + at org.springframework.beans.factory.support.AbstractBeanFactory.getMergedLocalBeanDefinition(AbstractBeanFactory.java:1362) ~[spring-beans-6.1.14.jar:6.1.14] + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:300) ~[spring-beans-6.1.14.jar:6.1.14] + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) ~[spring-beans-6.1.14.jar:6.1.14] + at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:365) ~[spring-beans-6.1.14.jar:6.1.14] + ... 111 common frames omitted +2025-10-29 10:29:39 [Test worker] WARN o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.boot.test.mock.mockito.MockitoTestExecutionListener] to prepare test instance [com.unicorn.hgzero.stt.controller.RecordingControllerTest@124a5e54] +java.lang.IllegalStateException: ApplicationContext failure threshold (1) exceeded: skipping repeated attempt to load context for [WebMergedContextConfiguration@2b8030c6 testClass = com.unicorn.hgzero.stt.controller.RecordingControllerTest, locations = [], classes = [com.unicorn.hgzero.stt.SttApplication], contextInitializerClasses = [], activeProfiles = [], propertySourceDescriptors = [], propertySourceProperties = ["org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.OnFailureConditionReportContextCustomizerFactory$OnFailureConditionReportContextCustomizer@4da602fc, org.springframework.boot.test.autoconfigure.OverrideAutoConfigurationContextCustomizerFactory$DisableAutoConfigurationContextCustomizer@772739ee, org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@1f, org.springframework.boot.test.autoconfigure.filter.TypeExcludeFiltersContextCustomizer@a2178532, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@312191ab, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizer@57eda880, [ImportsContextCustomizer@5fe8810d key = [org.springframework.boot.autoconfigure.task.TaskExecutionAutoConfiguration, org.springframework.boot.autoconfigure.cache.CacheAutoConfiguration, org.springframework.boot.autoconfigure.web.servlet.HttpEncodingAutoConfiguration, org.springframework.boot.autoconfigure.validation.ValidationAutoConfiguration, org.springframework.boot.autoconfigure.context.MessageSourceAutoConfiguration, org.springframework.boot.autoconfigure.hateoas.HypermediaAutoConfiguration, org.springframework.boot.autoconfigure.jackson.JacksonAutoConfiguration, org.springframework.boot.autoconfigure.data.web.SpringDataWebAutoConfiguration, org.springframework.boot.test.autoconfigure.web.reactive.WebTestClientAutoConfiguration, org.springframework.boot.autoconfigure.web.servlet.error.ErrorMvcAutoConfiguration, org.springframework.boot.test.autoconfigure.web.servlet.MockMvcAutoConfiguration, org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration, org.springframework.boot.autoconfigure.security.servlet.SecurityFilterAutoConfiguration, org.springframework.boot.autoconfigure.http.HttpMessageConvertersAutoConfiguration, org.springframework.boot.autoconfigure.security.oauth2.client.servlet.OAuth2ClientAutoConfiguration, org.springframework.boot.test.autoconfigure.web.servlet.MockMvcSecurityConfiguration, org.springframework.boot.test.autoconfigure.web.servlet.MockMvcWebClientAutoConfiguration, org.springframework.boot.test.autoconfigure.web.servlet.MockMvcWebDriverAutoConfiguration, org.springframework.boot.autoconfigure.thymeleaf.ThymeleafAutoConfiguration, org.springframework.boot.autoconfigure.gson.GsonAutoConfiguration, org.springframework.boot.autoconfigure.jsonb.JsonbAutoConfiguration, org.springframework.boot.autoconfigure.freemarker.FreeMarkerAutoConfiguration, org.springframework.boot.autoconfigure.web.servlet.WebMvcAutoConfiguration, org.springframework.boot.autoconfigure.security.servlet.UserDetailsServiceAutoConfiguration, org.springframework.boot.autoconfigure.security.oauth2.resource.servlet.OAuth2ResourceServerAutoConfiguration, org.springframework.boot.autoconfigure.groovy.template.GroovyTemplateAutoConfiguration, org.springframework.boot.autoconfigure.mustache.MustacheAutoConfiguration]], org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@5af3a0f, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@72cf2de5, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@de7c9eb0, org.springframework.boot.test.web.reactor.netty.DisableReactorResourceFactoryGlobalResourcesContextCustomizerFactory$DisableReactorResourceFactoryGlobalResourcesContextCustomizerCustomizer@47db5fa5, org.springframework.boot.test.context.SpringBootTestAnnotation@4f74f1a8], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:145) ~[spring-test-6.1.14.jar:6.1.14] + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:130) ~[spring-test-6.1.14.jar:6.1.14] + at org.springframework.boot.test.mock.mockito.MockitoTestExecutionListener.postProcessFields(MockitoTestExecutionListener.java:122) ~[spring-boot-test-3.3.5.jar:3.3.5] + at org.springframework.boot.test.mock.mockito.MockitoTestExecutionListener.injectFields(MockitoTestExecutionListener.java:106) ~[spring-boot-test-3.3.5.jar:3.3.5] + at org.springframework.boot.test.mock.mockito.MockitoTestExecutionListener.prepareTestInstance(MockitoTestExecutionListener.java:63) ~[spring-boot-test-3.3.5.jar:3.3.5] + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:260) ~[spring-test-6.1.14.jar:6.1.14] + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:163) ~[spring-test-6.1.14.jar:6.1.14] + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:378) ~[junit-jupiter-engine-5.10.5.jar:5.10.5] + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:383) ~[junit-jupiter-engine-5.10.5.jar:5.10.5] + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:378) ~[junit-jupiter-engine-5.10.5.jar:5.10.5] + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:215) ~[na:na] + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:197) ~[na:na] + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1709) ~[na:na] + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:570) ~[na:na] + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:560) ~[na:na] + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:315) ~[na:na] + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) ~[na:na] + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) ~[na:na] + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:807) ~[na:na] + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:377) ~[junit-jupiter-engine-5.10.5.jar:5.10.5] + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:290) ~[junit-jupiter-engine-5.10.5.jar:5.10.5] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:289) ~[junit-jupiter-engine-5.10.5.jar:5.10.5] + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:279) ~[junit-jupiter-engine-5.10.5.jar:5.10.5] + at java.base/java.util.Optional.orElseGet(Optional.java:364) ~[na:na] + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:278) ~[junit-jupiter-engine-5.10.5.jar:5.10.5] + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) ~[junit-jupiter-engine-5.10.5.jar:5.10.5] + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:106) ~[junit-jupiter-engine-5.10.5.jar:5.10.5] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:105) ~[junit-jupiter-engine-5.10.5.jar:5.10.5] + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:69) ~[junit-jupiter-engine-5.10.5.jar:5.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:128) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:128) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at java.base/java.util.ArrayList.forEach(ArrayList.java:1597) ~[na:na] + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:160) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:146) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:144) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:143) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:100) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at java.base/java.util.ArrayList.forEach(ArrayList.java:1597) ~[na:na] + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:160) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:146) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:144) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:143) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:100) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) ~[junit-platform-launcher-1.8.2.jar:1.8.2] + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) ~[junit-platform-launcher-1.8.2.jar:1.8.2] + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) ~[junit-platform-launcher-1.8.2.jar:1.8.2] + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) ~[junit-platform-launcher-1.8.2.jar:1.8.2] + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) ~[junit-platform-launcher-1.8.2.jar:1.8.2] + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) ~[junit-platform-launcher-1.8.2.jar:1.8.2] + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) ~[junit-platform-launcher-1.8.2.jar:1.8.2] + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) ~[junit-platform-launcher-1.8.2.jar:1.8.2] + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) ~[na:na] + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) ~[na:na] + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) ~[na:na] + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) ~[na:na] + at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103) ~[na:na] + at java.base/java.lang.reflect.Method.invoke(Method.java:580) ~[na:na] + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) ~[na:na] + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) ~[na:na] + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) ~[na:na] + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) ~[na:na] + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) ~[na:na] + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) ~[na:na] + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) ~[na:na] + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) ~[na:na] + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) ~[na:na] + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) ~[na:na] + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:122) ~[na:na] + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:72) ~[na:na] + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) ~[gradle-worker.jar:na] + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) ~[gradle-worker.jar:na] +2025-10-29 10:29:39 [Test worker] WARN o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.boot.test.mock.mockito.MockitoTestExecutionListener] to prepare test instance [com.unicorn.hgzero.stt.controller.RecordingControllerTest@bc86ac] +java.lang.IllegalStateException: ApplicationContext failure threshold (1) exceeded: skipping repeated attempt to load context for [WebMergedContextConfiguration@2b8030c6 testClass = com.unicorn.hgzero.stt.controller.RecordingControllerTest, locations = [], classes = [com.unicorn.hgzero.stt.SttApplication], contextInitializerClasses = [], activeProfiles = [], propertySourceDescriptors = [], propertySourceProperties = ["org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.OnFailureConditionReportContextCustomizerFactory$OnFailureConditionReportContextCustomizer@4da602fc, org.springframework.boot.test.autoconfigure.OverrideAutoConfigurationContextCustomizerFactory$DisableAutoConfigurationContextCustomizer@772739ee, org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@1f, org.springframework.boot.test.autoconfigure.filter.TypeExcludeFiltersContextCustomizer@a2178532, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@312191ab, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizer@57eda880, [ImportsContextCustomizer@5fe8810d key = [org.springframework.boot.autoconfigure.task.TaskExecutionAutoConfiguration, org.springframework.boot.autoconfigure.cache.CacheAutoConfiguration, org.springframework.boot.autoconfigure.web.servlet.HttpEncodingAutoConfiguration, org.springframework.boot.autoconfigure.validation.ValidationAutoConfiguration, org.springframework.boot.autoconfigure.context.MessageSourceAutoConfiguration, org.springframework.boot.autoconfigure.hateoas.HypermediaAutoConfiguration, org.springframework.boot.autoconfigure.jackson.JacksonAutoConfiguration, org.springframework.boot.autoconfigure.data.web.SpringDataWebAutoConfiguration, org.springframework.boot.test.autoconfigure.web.reactive.WebTestClientAutoConfiguration, org.springframework.boot.autoconfigure.web.servlet.error.ErrorMvcAutoConfiguration, org.springframework.boot.test.autoconfigure.web.servlet.MockMvcAutoConfiguration, org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration, org.springframework.boot.autoconfigure.security.servlet.SecurityFilterAutoConfiguration, org.springframework.boot.autoconfigure.http.HttpMessageConvertersAutoConfiguration, org.springframework.boot.autoconfigure.security.oauth2.client.servlet.OAuth2ClientAutoConfiguration, org.springframework.boot.test.autoconfigure.web.servlet.MockMvcSecurityConfiguration, org.springframework.boot.test.autoconfigure.web.servlet.MockMvcWebClientAutoConfiguration, org.springframework.boot.test.autoconfigure.web.servlet.MockMvcWebDriverAutoConfiguration, org.springframework.boot.autoconfigure.thymeleaf.ThymeleafAutoConfiguration, org.springframework.boot.autoconfigure.gson.GsonAutoConfiguration, org.springframework.boot.autoconfigure.jsonb.JsonbAutoConfiguration, org.springframework.boot.autoconfigure.freemarker.FreeMarkerAutoConfiguration, org.springframework.boot.autoconfigure.web.servlet.WebMvcAutoConfiguration, org.springframework.boot.autoconfigure.security.servlet.UserDetailsServiceAutoConfiguration, org.springframework.boot.autoconfigure.security.oauth2.resource.servlet.OAuth2ResourceServerAutoConfiguration, org.springframework.boot.autoconfigure.groovy.template.GroovyTemplateAutoConfiguration, org.springframework.boot.autoconfigure.mustache.MustacheAutoConfiguration]], org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@5af3a0f, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@72cf2de5, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@de7c9eb0, org.springframework.boot.test.web.reactor.netty.DisableReactorResourceFactoryGlobalResourcesContextCustomizerFactory$DisableReactorResourceFactoryGlobalResourcesContextCustomizerCustomizer@47db5fa5, org.springframework.boot.test.context.SpringBootTestAnnotation@4f74f1a8], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:145) ~[spring-test-6.1.14.jar:6.1.14] + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:130) ~[spring-test-6.1.14.jar:6.1.14] + at org.springframework.boot.test.mock.mockito.MockitoTestExecutionListener.postProcessFields(MockitoTestExecutionListener.java:122) ~[spring-boot-test-3.3.5.jar:3.3.5] + at org.springframework.boot.test.mock.mockito.MockitoTestExecutionListener.injectFields(MockitoTestExecutionListener.java:106) ~[spring-boot-test-3.3.5.jar:3.3.5] + at org.springframework.boot.test.mock.mockito.MockitoTestExecutionListener.prepareTestInstance(MockitoTestExecutionListener.java:63) ~[spring-boot-test-3.3.5.jar:3.3.5] + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:260) ~[spring-test-6.1.14.jar:6.1.14] + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:163) ~[spring-test-6.1.14.jar:6.1.14] + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:378) ~[junit-jupiter-engine-5.10.5.jar:5.10.5] + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:383) ~[junit-jupiter-engine-5.10.5.jar:5.10.5] + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:378) ~[junit-jupiter-engine-5.10.5.jar:5.10.5] + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:215) ~[na:na] + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:197) ~[na:na] + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1709) ~[na:na] + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:570) ~[na:na] + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:560) ~[na:na] + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:315) ~[na:na] + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) ~[na:na] + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) ~[na:na] + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:807) ~[na:na] + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:377) ~[junit-jupiter-engine-5.10.5.jar:5.10.5] + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:290) ~[junit-jupiter-engine-5.10.5.jar:5.10.5] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:289) ~[junit-jupiter-engine-5.10.5.jar:5.10.5] + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:279) ~[junit-jupiter-engine-5.10.5.jar:5.10.5] + at java.base/java.util.Optional.orElseGet(Optional.java:364) ~[na:na] + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:278) ~[junit-jupiter-engine-5.10.5.jar:5.10.5] + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) ~[junit-jupiter-engine-5.10.5.jar:5.10.5] + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:106) ~[junit-jupiter-engine-5.10.5.jar:5.10.5] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:105) ~[junit-jupiter-engine-5.10.5.jar:5.10.5] + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:69) ~[junit-jupiter-engine-5.10.5.jar:5.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:128) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:128) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at java.base/java.util.ArrayList.forEach(ArrayList.java:1597) ~[na:na] + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:160) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:146) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:144) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:143) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:100) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at java.base/java.util.ArrayList.forEach(ArrayList.java:1597) ~[na:na] + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:160) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:146) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:144) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:143) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:100) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) ~[junit-platform-launcher-1.8.2.jar:1.8.2] + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) ~[junit-platform-launcher-1.8.2.jar:1.8.2] + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) ~[junit-platform-launcher-1.8.2.jar:1.8.2] + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) ~[junit-platform-launcher-1.8.2.jar:1.8.2] + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) ~[junit-platform-launcher-1.8.2.jar:1.8.2] + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) ~[junit-platform-launcher-1.8.2.jar:1.8.2] + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) ~[junit-platform-launcher-1.8.2.jar:1.8.2] + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) ~[junit-platform-launcher-1.8.2.jar:1.8.2] + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) ~[na:na] + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) ~[na:na] + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) ~[na:na] + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) ~[na:na] + at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103) ~[na:na] + at java.base/java.lang.reflect.Method.invoke(Method.java:580) ~[na:na] + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) ~[na:na] + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) ~[na:na] + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) ~[na:na] + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) ~[na:na] + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) ~[na:na] + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) ~[na:na] + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) ~[na:na] + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) ~[na:na] + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) ~[na:na] + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) ~[na:na] + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:122) ~[na:na] + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:72) ~[na:na] + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) ~[gradle-worker.jar:na] + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) ~[gradle-worker.jar:na] +2025-10-29 10:29:39 [Test worker] WARN o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.boot.test.mock.mockito.MockitoTestExecutionListener] to prepare test instance [com.unicorn.hgzero.stt.controller.RecordingControllerTest@4e5b0a90] +java.lang.IllegalStateException: ApplicationContext failure threshold (1) exceeded: skipping repeated attempt to load context for [WebMergedContextConfiguration@2b8030c6 testClass = com.unicorn.hgzero.stt.controller.RecordingControllerTest, locations = [], classes = [com.unicorn.hgzero.stt.SttApplication], contextInitializerClasses = [], activeProfiles = [], propertySourceDescriptors = [], propertySourceProperties = ["org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.OnFailureConditionReportContextCustomizerFactory$OnFailureConditionReportContextCustomizer@4da602fc, org.springframework.boot.test.autoconfigure.OverrideAutoConfigurationContextCustomizerFactory$DisableAutoConfigurationContextCustomizer@772739ee, org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@1f, org.springframework.boot.test.autoconfigure.filter.TypeExcludeFiltersContextCustomizer@a2178532, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@312191ab, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizer@57eda880, [ImportsContextCustomizer@5fe8810d key = [org.springframework.boot.autoconfigure.task.TaskExecutionAutoConfiguration, org.springframework.boot.autoconfigure.cache.CacheAutoConfiguration, org.springframework.boot.autoconfigure.web.servlet.HttpEncodingAutoConfiguration, org.springframework.boot.autoconfigure.validation.ValidationAutoConfiguration, org.springframework.boot.autoconfigure.context.MessageSourceAutoConfiguration, org.springframework.boot.autoconfigure.hateoas.HypermediaAutoConfiguration, org.springframework.boot.autoconfigure.jackson.JacksonAutoConfiguration, org.springframework.boot.autoconfigure.data.web.SpringDataWebAutoConfiguration, org.springframework.boot.test.autoconfigure.web.reactive.WebTestClientAutoConfiguration, org.springframework.boot.autoconfigure.web.servlet.error.ErrorMvcAutoConfiguration, org.springframework.boot.test.autoconfigure.web.servlet.MockMvcAutoConfiguration, org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration, org.springframework.boot.autoconfigure.security.servlet.SecurityFilterAutoConfiguration, org.springframework.boot.autoconfigure.http.HttpMessageConvertersAutoConfiguration, org.springframework.boot.autoconfigure.security.oauth2.client.servlet.OAuth2ClientAutoConfiguration, org.springframework.boot.test.autoconfigure.web.servlet.MockMvcSecurityConfiguration, org.springframework.boot.test.autoconfigure.web.servlet.MockMvcWebClientAutoConfiguration, org.springframework.boot.test.autoconfigure.web.servlet.MockMvcWebDriverAutoConfiguration, org.springframework.boot.autoconfigure.thymeleaf.ThymeleafAutoConfiguration, org.springframework.boot.autoconfigure.gson.GsonAutoConfiguration, org.springframework.boot.autoconfigure.jsonb.JsonbAutoConfiguration, org.springframework.boot.autoconfigure.freemarker.FreeMarkerAutoConfiguration, org.springframework.boot.autoconfigure.web.servlet.WebMvcAutoConfiguration, org.springframework.boot.autoconfigure.security.servlet.UserDetailsServiceAutoConfiguration, org.springframework.boot.autoconfigure.security.oauth2.resource.servlet.OAuth2ResourceServerAutoConfiguration, org.springframework.boot.autoconfigure.groovy.template.GroovyTemplateAutoConfiguration, org.springframework.boot.autoconfigure.mustache.MustacheAutoConfiguration]], org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@5af3a0f, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@72cf2de5, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@de7c9eb0, org.springframework.boot.test.web.reactor.netty.DisableReactorResourceFactoryGlobalResourcesContextCustomizerFactory$DisableReactorResourceFactoryGlobalResourcesContextCustomizerCustomizer@47db5fa5, org.springframework.boot.test.context.SpringBootTestAnnotation@4f74f1a8], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:145) ~[spring-test-6.1.14.jar:6.1.14] + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:130) ~[spring-test-6.1.14.jar:6.1.14] + at org.springframework.boot.test.mock.mockito.MockitoTestExecutionListener.postProcessFields(MockitoTestExecutionListener.java:122) ~[spring-boot-test-3.3.5.jar:3.3.5] + at org.springframework.boot.test.mock.mockito.MockitoTestExecutionListener.injectFields(MockitoTestExecutionListener.java:106) ~[spring-boot-test-3.3.5.jar:3.3.5] + at org.springframework.boot.test.mock.mockito.MockitoTestExecutionListener.prepareTestInstance(MockitoTestExecutionListener.java:63) ~[spring-boot-test-3.3.5.jar:3.3.5] + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:260) ~[spring-test-6.1.14.jar:6.1.14] + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:163) ~[spring-test-6.1.14.jar:6.1.14] + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:378) ~[junit-jupiter-engine-5.10.5.jar:5.10.5] + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:383) ~[junit-jupiter-engine-5.10.5.jar:5.10.5] + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:378) ~[junit-jupiter-engine-5.10.5.jar:5.10.5] + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:215) ~[na:na] + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:197) ~[na:na] + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1709) ~[na:na] + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:570) ~[na:na] + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:560) ~[na:na] + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:315) ~[na:na] + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) ~[na:na] + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) ~[na:na] + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:807) ~[na:na] + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:377) ~[junit-jupiter-engine-5.10.5.jar:5.10.5] + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:290) ~[junit-jupiter-engine-5.10.5.jar:5.10.5] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:289) ~[junit-jupiter-engine-5.10.5.jar:5.10.5] + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:279) ~[junit-jupiter-engine-5.10.5.jar:5.10.5] + at java.base/java.util.Optional.orElseGet(Optional.java:364) ~[na:na] + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:278) ~[junit-jupiter-engine-5.10.5.jar:5.10.5] + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) ~[junit-jupiter-engine-5.10.5.jar:5.10.5] + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:106) ~[junit-jupiter-engine-5.10.5.jar:5.10.5] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:105) ~[junit-jupiter-engine-5.10.5.jar:5.10.5] + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:69) ~[junit-jupiter-engine-5.10.5.jar:5.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:128) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:128) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at java.base/java.util.ArrayList.forEach(ArrayList.java:1597) ~[na:na] + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:160) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:146) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:144) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:143) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:100) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at java.base/java.util.ArrayList.forEach(ArrayList.java:1597) ~[na:na] + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:160) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:146) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:144) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:143) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:100) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) ~[junit-platform-launcher-1.8.2.jar:1.8.2] + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) ~[junit-platform-launcher-1.8.2.jar:1.8.2] + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) ~[junit-platform-launcher-1.8.2.jar:1.8.2] + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) ~[junit-platform-launcher-1.8.2.jar:1.8.2] + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) ~[junit-platform-launcher-1.8.2.jar:1.8.2] + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) ~[junit-platform-launcher-1.8.2.jar:1.8.2] + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) ~[junit-platform-launcher-1.8.2.jar:1.8.2] + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) ~[junit-platform-launcher-1.8.2.jar:1.8.2] + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) ~[na:na] + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) ~[na:na] + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) ~[na:na] + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) ~[na:na] + at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103) ~[na:na] + at java.base/java.lang.reflect.Method.invoke(Method.java:580) ~[na:na] + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) ~[na:na] + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) ~[na:na] + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) ~[na:na] + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) ~[na:na] + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) ~[na:na] + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) ~[na:na] + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) ~[na:na] + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) ~[na:na] + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) ~[na:na] + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) ~[na:na] + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:122) ~[na:na] + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:72) ~[na:na] + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) ~[gradle-worker.jar:na] + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) ~[gradle-worker.jar:na] +2025-10-29 10:29:39 [Test worker] WARN o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.boot.test.mock.mockito.MockitoTestExecutionListener] to prepare test instance [com.unicorn.hgzero.stt.controller.RecordingControllerTest@5f9b22c1] +java.lang.IllegalStateException: ApplicationContext failure threshold (1) exceeded: skipping repeated attempt to load context for [WebMergedContextConfiguration@2b8030c6 testClass = com.unicorn.hgzero.stt.controller.RecordingControllerTest, locations = [], classes = [com.unicorn.hgzero.stt.SttApplication], contextInitializerClasses = [], activeProfiles = [], propertySourceDescriptors = [], propertySourceProperties = ["org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.OnFailureConditionReportContextCustomizerFactory$OnFailureConditionReportContextCustomizer@4da602fc, org.springframework.boot.test.autoconfigure.OverrideAutoConfigurationContextCustomizerFactory$DisableAutoConfigurationContextCustomizer@772739ee, org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@1f, org.springframework.boot.test.autoconfigure.filter.TypeExcludeFiltersContextCustomizer@a2178532, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@312191ab, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizer@57eda880, [ImportsContextCustomizer@5fe8810d key = [org.springframework.boot.autoconfigure.task.TaskExecutionAutoConfiguration, org.springframework.boot.autoconfigure.cache.CacheAutoConfiguration, org.springframework.boot.autoconfigure.web.servlet.HttpEncodingAutoConfiguration, org.springframework.boot.autoconfigure.validation.ValidationAutoConfiguration, org.springframework.boot.autoconfigure.context.MessageSourceAutoConfiguration, org.springframework.boot.autoconfigure.hateoas.HypermediaAutoConfiguration, org.springframework.boot.autoconfigure.jackson.JacksonAutoConfiguration, org.springframework.boot.autoconfigure.data.web.SpringDataWebAutoConfiguration, org.springframework.boot.test.autoconfigure.web.reactive.WebTestClientAutoConfiguration, org.springframework.boot.autoconfigure.web.servlet.error.ErrorMvcAutoConfiguration, org.springframework.boot.test.autoconfigure.web.servlet.MockMvcAutoConfiguration, org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration, org.springframework.boot.autoconfigure.security.servlet.SecurityFilterAutoConfiguration, org.springframework.boot.autoconfigure.http.HttpMessageConvertersAutoConfiguration, org.springframework.boot.autoconfigure.security.oauth2.client.servlet.OAuth2ClientAutoConfiguration, org.springframework.boot.test.autoconfigure.web.servlet.MockMvcSecurityConfiguration, org.springframework.boot.test.autoconfigure.web.servlet.MockMvcWebClientAutoConfiguration, org.springframework.boot.test.autoconfigure.web.servlet.MockMvcWebDriverAutoConfiguration, org.springframework.boot.autoconfigure.thymeleaf.ThymeleafAutoConfiguration, org.springframework.boot.autoconfigure.gson.GsonAutoConfiguration, org.springframework.boot.autoconfigure.jsonb.JsonbAutoConfiguration, org.springframework.boot.autoconfigure.freemarker.FreeMarkerAutoConfiguration, org.springframework.boot.autoconfigure.web.servlet.WebMvcAutoConfiguration, org.springframework.boot.autoconfigure.security.servlet.UserDetailsServiceAutoConfiguration, org.springframework.boot.autoconfigure.security.oauth2.resource.servlet.OAuth2ResourceServerAutoConfiguration, org.springframework.boot.autoconfigure.groovy.template.GroovyTemplateAutoConfiguration, org.springframework.boot.autoconfigure.mustache.MustacheAutoConfiguration]], org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@5af3a0f, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@72cf2de5, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@de7c9eb0, org.springframework.boot.test.web.reactor.netty.DisableReactorResourceFactoryGlobalResourcesContextCustomizerFactory$DisableReactorResourceFactoryGlobalResourcesContextCustomizerCustomizer@47db5fa5, org.springframework.boot.test.context.SpringBootTestAnnotation@4f74f1a8], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:145) ~[spring-test-6.1.14.jar:6.1.14] + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:130) ~[spring-test-6.1.14.jar:6.1.14] + at org.springframework.boot.test.mock.mockito.MockitoTestExecutionListener.postProcessFields(MockitoTestExecutionListener.java:122) ~[spring-boot-test-3.3.5.jar:3.3.5] + at org.springframework.boot.test.mock.mockito.MockitoTestExecutionListener.injectFields(MockitoTestExecutionListener.java:106) ~[spring-boot-test-3.3.5.jar:3.3.5] + at org.springframework.boot.test.mock.mockito.MockitoTestExecutionListener.prepareTestInstance(MockitoTestExecutionListener.java:63) ~[spring-boot-test-3.3.5.jar:3.3.5] + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:260) ~[spring-test-6.1.14.jar:6.1.14] + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:163) ~[spring-test-6.1.14.jar:6.1.14] + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:378) ~[junit-jupiter-engine-5.10.5.jar:5.10.5] + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:383) ~[junit-jupiter-engine-5.10.5.jar:5.10.5] + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:378) ~[junit-jupiter-engine-5.10.5.jar:5.10.5] + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:215) ~[na:na] + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:197) ~[na:na] + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1709) ~[na:na] + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:570) ~[na:na] + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:560) ~[na:na] + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:315) ~[na:na] + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) ~[na:na] + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) ~[na:na] + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:807) ~[na:na] + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:377) ~[junit-jupiter-engine-5.10.5.jar:5.10.5] + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:290) ~[junit-jupiter-engine-5.10.5.jar:5.10.5] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:289) ~[junit-jupiter-engine-5.10.5.jar:5.10.5] + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:279) ~[junit-jupiter-engine-5.10.5.jar:5.10.5] + at java.base/java.util.Optional.orElseGet(Optional.java:364) ~[na:na] + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:278) ~[junit-jupiter-engine-5.10.5.jar:5.10.5] + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) ~[junit-jupiter-engine-5.10.5.jar:5.10.5] + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:106) ~[junit-jupiter-engine-5.10.5.jar:5.10.5] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:105) ~[junit-jupiter-engine-5.10.5.jar:5.10.5] + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:69) ~[junit-jupiter-engine-5.10.5.jar:5.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:128) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:128) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at java.base/java.util.ArrayList.forEach(ArrayList.java:1597) ~[na:na] + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:160) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:146) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:144) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:143) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:100) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at java.base/java.util.ArrayList.forEach(ArrayList.java:1597) ~[na:na] + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:160) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:146) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:144) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:143) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:100) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) ~[junit-platform-launcher-1.8.2.jar:1.8.2] + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) ~[junit-platform-launcher-1.8.2.jar:1.8.2] + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) ~[junit-platform-launcher-1.8.2.jar:1.8.2] + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) ~[junit-platform-launcher-1.8.2.jar:1.8.2] + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) ~[junit-platform-launcher-1.8.2.jar:1.8.2] + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) ~[junit-platform-launcher-1.8.2.jar:1.8.2] + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) ~[junit-platform-launcher-1.8.2.jar:1.8.2] + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) ~[junit-platform-launcher-1.8.2.jar:1.8.2] + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) ~[na:na] + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) ~[na:na] + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) ~[na:na] + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) ~[na:na] + at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103) ~[na:na] + at java.base/java.lang.reflect.Method.invoke(Method.java:580) ~[na:na] + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) ~[na:na] + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) ~[na:na] + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) ~[na:na] + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) ~[na:na] + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) ~[na:na] + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) ~[na:na] + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) ~[na:na] + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) ~[na:na] + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) ~[na:na] + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) ~[na:na] + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:122) ~[na:na] + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:72) ~[na:na] + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) ~[gradle-worker.jar:na] + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) ~[gradle-worker.jar:na] +2025-10-29 10:29:39 [Test worker] WARN o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.boot.test.mock.mockito.MockitoTestExecutionListener] to prepare test instance [com.unicorn.hgzero.stt.controller.RecordingControllerTest@5dda5493] +java.lang.IllegalStateException: ApplicationContext failure threshold (1) exceeded: skipping repeated attempt to load context for [WebMergedContextConfiguration@2b8030c6 testClass = com.unicorn.hgzero.stt.controller.RecordingControllerTest, locations = [], classes = [com.unicorn.hgzero.stt.SttApplication], contextInitializerClasses = [], activeProfiles = [], propertySourceDescriptors = [], propertySourceProperties = ["org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.OnFailureConditionReportContextCustomizerFactory$OnFailureConditionReportContextCustomizer@4da602fc, org.springframework.boot.test.autoconfigure.OverrideAutoConfigurationContextCustomizerFactory$DisableAutoConfigurationContextCustomizer@772739ee, org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@1f, org.springframework.boot.test.autoconfigure.filter.TypeExcludeFiltersContextCustomizer@a2178532, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@312191ab, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizer@57eda880, [ImportsContextCustomizer@5fe8810d key = [org.springframework.boot.autoconfigure.task.TaskExecutionAutoConfiguration, org.springframework.boot.autoconfigure.cache.CacheAutoConfiguration, org.springframework.boot.autoconfigure.web.servlet.HttpEncodingAutoConfiguration, org.springframework.boot.autoconfigure.validation.ValidationAutoConfiguration, org.springframework.boot.autoconfigure.context.MessageSourceAutoConfiguration, org.springframework.boot.autoconfigure.hateoas.HypermediaAutoConfiguration, org.springframework.boot.autoconfigure.jackson.JacksonAutoConfiguration, org.springframework.boot.autoconfigure.data.web.SpringDataWebAutoConfiguration, org.springframework.boot.test.autoconfigure.web.reactive.WebTestClientAutoConfiguration, org.springframework.boot.autoconfigure.web.servlet.error.ErrorMvcAutoConfiguration, org.springframework.boot.test.autoconfigure.web.servlet.MockMvcAutoConfiguration, org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration, org.springframework.boot.autoconfigure.security.servlet.SecurityFilterAutoConfiguration, org.springframework.boot.autoconfigure.http.HttpMessageConvertersAutoConfiguration, org.springframework.boot.autoconfigure.security.oauth2.client.servlet.OAuth2ClientAutoConfiguration, org.springframework.boot.test.autoconfigure.web.servlet.MockMvcSecurityConfiguration, org.springframework.boot.test.autoconfigure.web.servlet.MockMvcWebClientAutoConfiguration, org.springframework.boot.test.autoconfigure.web.servlet.MockMvcWebDriverAutoConfiguration, org.springframework.boot.autoconfigure.thymeleaf.ThymeleafAutoConfiguration, org.springframework.boot.autoconfigure.gson.GsonAutoConfiguration, org.springframework.boot.autoconfigure.jsonb.JsonbAutoConfiguration, org.springframework.boot.autoconfigure.freemarker.FreeMarkerAutoConfiguration, org.springframework.boot.autoconfigure.web.servlet.WebMvcAutoConfiguration, org.springframework.boot.autoconfigure.security.servlet.UserDetailsServiceAutoConfiguration, org.springframework.boot.autoconfigure.security.oauth2.resource.servlet.OAuth2ResourceServerAutoConfiguration, org.springframework.boot.autoconfigure.groovy.template.GroovyTemplateAutoConfiguration, org.springframework.boot.autoconfigure.mustache.MustacheAutoConfiguration]], org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@5af3a0f, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@72cf2de5, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@de7c9eb0, org.springframework.boot.test.web.reactor.netty.DisableReactorResourceFactoryGlobalResourcesContextCustomizerFactory$DisableReactorResourceFactoryGlobalResourcesContextCustomizerCustomizer@47db5fa5, org.springframework.boot.test.context.SpringBootTestAnnotation@4f74f1a8], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:145) ~[spring-test-6.1.14.jar:6.1.14] + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:130) ~[spring-test-6.1.14.jar:6.1.14] + at org.springframework.boot.test.mock.mockito.MockitoTestExecutionListener.postProcessFields(MockitoTestExecutionListener.java:122) ~[spring-boot-test-3.3.5.jar:3.3.5] + at org.springframework.boot.test.mock.mockito.MockitoTestExecutionListener.injectFields(MockitoTestExecutionListener.java:106) ~[spring-boot-test-3.3.5.jar:3.3.5] + at org.springframework.boot.test.mock.mockito.MockitoTestExecutionListener.prepareTestInstance(MockitoTestExecutionListener.java:63) ~[spring-boot-test-3.3.5.jar:3.3.5] + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:260) ~[spring-test-6.1.14.jar:6.1.14] + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:163) ~[spring-test-6.1.14.jar:6.1.14] + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:378) ~[junit-jupiter-engine-5.10.5.jar:5.10.5] + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:383) ~[junit-jupiter-engine-5.10.5.jar:5.10.5] + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:378) ~[junit-jupiter-engine-5.10.5.jar:5.10.5] + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:215) ~[na:na] + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:197) ~[na:na] + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1709) ~[na:na] + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:570) ~[na:na] + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:560) ~[na:na] + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:315) ~[na:na] + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) ~[na:na] + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) ~[na:na] + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:807) ~[na:na] + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:377) ~[junit-jupiter-engine-5.10.5.jar:5.10.5] + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:290) ~[junit-jupiter-engine-5.10.5.jar:5.10.5] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:289) ~[junit-jupiter-engine-5.10.5.jar:5.10.5] + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:279) ~[junit-jupiter-engine-5.10.5.jar:5.10.5] + at java.base/java.util.Optional.orElseGet(Optional.java:364) ~[na:na] + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:278) ~[junit-jupiter-engine-5.10.5.jar:5.10.5] + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) ~[junit-jupiter-engine-5.10.5.jar:5.10.5] + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:106) ~[junit-jupiter-engine-5.10.5.jar:5.10.5] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:105) ~[junit-jupiter-engine-5.10.5.jar:5.10.5] + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:69) ~[junit-jupiter-engine-5.10.5.jar:5.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:128) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:128) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at java.base/java.util.ArrayList.forEach(ArrayList.java:1597) ~[na:na] + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:160) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:146) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:144) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:143) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:100) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at java.base/java.util.ArrayList.forEach(ArrayList.java:1597) ~[na:na] + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:160) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:146) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:144) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:143) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:100) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) ~[junit-platform-launcher-1.8.2.jar:1.8.2] + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) ~[junit-platform-launcher-1.8.2.jar:1.8.2] + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) ~[junit-platform-launcher-1.8.2.jar:1.8.2] + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) ~[junit-platform-launcher-1.8.2.jar:1.8.2] + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) ~[junit-platform-launcher-1.8.2.jar:1.8.2] + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) ~[junit-platform-launcher-1.8.2.jar:1.8.2] + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) ~[junit-platform-launcher-1.8.2.jar:1.8.2] + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) ~[junit-platform-launcher-1.8.2.jar:1.8.2] + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) ~[na:na] + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) ~[na:na] + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) ~[na:na] + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) ~[na:na] + at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103) ~[na:na] + at java.base/java.lang.reflect.Method.invoke(Method.java:580) ~[na:na] + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) ~[na:na] + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) ~[na:na] + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) ~[na:na] + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) ~[na:na] + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) ~[na:na] + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) ~[na:na] + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) ~[na:na] + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) ~[na:na] + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) ~[na:na] + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) ~[na:na] + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:122) ~[na:na] + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:72) ~[na:na] + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) ~[gradle-worker.jar:na] + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) ~[gradle-worker.jar:na] +2025-10-29 10:29:39 [Test worker] INFO o.s.t.c.s.AnnotationConfigContextLoaderUtils - Could not detect default configuration classes for test class [com.unicorn.hgzero.stt.controller.SimpleRecordingControllerTest]: SimpleRecordingControllerTest does not declare any static, non-private, non-final, nested classes annotated with @Configuration. +2025-10-29 10:29:39 [Test worker] INFO o.s.b.t.c.SpringBootTestContextBootstrapper - Found @SpringBootConfiguration com.unicorn.hgzero.stt.SttApplication for test class com.unicorn.hgzero.stt.controller.SimpleRecordingControllerTest +2025-10-29 10:29:39 [Test worker] WARN o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.boot.test.mock.mockito.MockitoTestExecutionListener] to prepare test instance [com.unicorn.hgzero.stt.controller.SimpleRecordingControllerTest@6a00b08c] +java.lang.IllegalStateException: ApplicationContext failure threshold (1) exceeded: skipping repeated attempt to load context for [WebMergedContextConfiguration@9a7c39d testClass = com.unicorn.hgzero.stt.controller.SimpleRecordingControllerTest, locations = [], classes = [com.unicorn.hgzero.stt.SttApplication], contextInitializerClasses = [], activeProfiles = [], propertySourceDescriptors = [], propertySourceProperties = ["org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.OnFailureConditionReportContextCustomizerFactory$OnFailureConditionReportContextCustomizer@4da602fc, org.springframework.boot.test.autoconfigure.OverrideAutoConfigurationContextCustomizerFactory$DisableAutoConfigurationContextCustomizer@772739ee, org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@1f, org.springframework.boot.test.autoconfigure.filter.TypeExcludeFiltersContextCustomizer@a2178532, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@312191ab, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizer@57eda880, [ImportsContextCustomizer@6cf737db key = [org.springframework.boot.autoconfigure.task.TaskExecutionAutoConfiguration, org.springframework.boot.autoconfigure.cache.CacheAutoConfiguration, org.springframework.boot.autoconfigure.web.servlet.HttpEncodingAutoConfiguration, org.springframework.boot.autoconfigure.validation.ValidationAutoConfiguration, org.springframework.boot.autoconfigure.context.MessageSourceAutoConfiguration, org.springframework.boot.autoconfigure.hateoas.HypermediaAutoConfiguration, org.springframework.boot.autoconfigure.jackson.JacksonAutoConfiguration, org.springframework.boot.autoconfigure.data.web.SpringDataWebAutoConfiguration, org.springframework.boot.test.autoconfigure.web.reactive.WebTestClientAutoConfiguration, org.springframework.boot.autoconfigure.web.servlet.error.ErrorMvcAutoConfiguration, org.springframework.boot.test.autoconfigure.web.servlet.MockMvcAutoConfiguration, org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration, org.springframework.boot.autoconfigure.security.servlet.SecurityFilterAutoConfiguration, org.springframework.boot.autoconfigure.http.HttpMessageConvertersAutoConfiguration, org.springframework.boot.autoconfigure.security.oauth2.client.servlet.OAuth2ClientAutoConfiguration, org.springframework.boot.test.autoconfigure.web.servlet.MockMvcSecurityConfiguration, org.springframework.boot.test.autoconfigure.web.servlet.MockMvcWebClientAutoConfiguration, org.springframework.boot.test.autoconfigure.web.servlet.MockMvcWebDriverAutoConfiguration, org.springframework.boot.autoconfigure.thymeleaf.ThymeleafAutoConfiguration, org.springframework.boot.autoconfigure.gson.GsonAutoConfiguration, org.springframework.boot.autoconfigure.jsonb.JsonbAutoConfiguration, org.springframework.boot.autoconfigure.freemarker.FreeMarkerAutoConfiguration, org.springframework.boot.autoconfigure.web.servlet.WebMvcAutoConfiguration, org.springframework.boot.autoconfigure.security.servlet.UserDetailsServiceAutoConfiguration, org.springframework.boot.autoconfigure.security.oauth2.resource.servlet.OAuth2ResourceServerAutoConfiguration, org.springframework.boot.autoconfigure.groovy.template.GroovyTemplateAutoConfiguration, org.springframework.boot.autoconfigure.mustache.MustacheAutoConfiguration]], org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@5af3a0f, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@72cf2de5, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@de7c9eb0, org.springframework.boot.test.web.reactor.netty.DisableReactorResourceFactoryGlobalResourcesContextCustomizerFactory$DisableReactorResourceFactoryGlobalResourcesContextCustomizerCustomizer@47db5fa5, org.springframework.boot.test.context.SpringBootTestAnnotation@4f74f1a8], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:145) ~[spring-test-6.1.14.jar:6.1.14] + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:130) ~[spring-test-6.1.14.jar:6.1.14] + at org.springframework.boot.test.mock.mockito.MockitoTestExecutionListener.postProcessFields(MockitoTestExecutionListener.java:122) ~[spring-boot-test-3.3.5.jar:3.3.5] + at org.springframework.boot.test.mock.mockito.MockitoTestExecutionListener.injectFields(MockitoTestExecutionListener.java:106) ~[spring-boot-test-3.3.5.jar:3.3.5] + at org.springframework.boot.test.mock.mockito.MockitoTestExecutionListener.prepareTestInstance(MockitoTestExecutionListener.java:63) ~[spring-boot-test-3.3.5.jar:3.3.5] + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:260) ~[spring-test-6.1.14.jar:6.1.14] + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:163) ~[spring-test-6.1.14.jar:6.1.14] + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:378) ~[junit-jupiter-engine-5.10.5.jar:5.10.5] + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:383) ~[junit-jupiter-engine-5.10.5.jar:5.10.5] + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:378) ~[junit-jupiter-engine-5.10.5.jar:5.10.5] + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:215) ~[na:na] + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:197) ~[na:na] + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1709) ~[na:na] + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:570) ~[na:na] + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:560) ~[na:na] + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:315) ~[na:na] + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) ~[na:na] + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) ~[na:na] + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:807) ~[na:na] + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:377) ~[junit-jupiter-engine-5.10.5.jar:5.10.5] + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:290) ~[junit-jupiter-engine-5.10.5.jar:5.10.5] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:289) ~[junit-jupiter-engine-5.10.5.jar:5.10.5] + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:279) ~[junit-jupiter-engine-5.10.5.jar:5.10.5] + at java.base/java.util.Optional.orElseGet(Optional.java:364) ~[na:na] + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:278) ~[junit-jupiter-engine-5.10.5.jar:5.10.5] + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) ~[junit-jupiter-engine-5.10.5.jar:5.10.5] + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:106) ~[junit-jupiter-engine-5.10.5.jar:5.10.5] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:105) ~[junit-jupiter-engine-5.10.5.jar:5.10.5] + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:69) ~[junit-jupiter-engine-5.10.5.jar:5.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:128) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:128) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at java.base/java.util.ArrayList.forEach(ArrayList.java:1597) ~[na:na] + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:160) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:146) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:144) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:143) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:100) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at java.base/java.util.ArrayList.forEach(ArrayList.java:1597) ~[na:na] + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:160) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:146) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:144) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:143) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:100) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) ~[junit-platform-launcher-1.8.2.jar:1.8.2] + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) ~[junit-platform-launcher-1.8.2.jar:1.8.2] + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) ~[junit-platform-launcher-1.8.2.jar:1.8.2] + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) ~[junit-platform-launcher-1.8.2.jar:1.8.2] + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) ~[junit-platform-launcher-1.8.2.jar:1.8.2] + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) ~[junit-platform-launcher-1.8.2.jar:1.8.2] + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) ~[junit-platform-launcher-1.8.2.jar:1.8.2] + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) ~[junit-platform-launcher-1.8.2.jar:1.8.2] + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) ~[na:na] + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) ~[na:na] + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) ~[na:na] + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) ~[na:na] + at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103) ~[na:na] + at java.base/java.lang.reflect.Method.invoke(Method.java:580) ~[na:na] + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) ~[na:na] + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) ~[na:na] + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) ~[na:na] + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) ~[na:na] + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) ~[na:na] + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) ~[na:na] + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) ~[na:na] + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) ~[na:na] + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) ~[na:na] + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) ~[na:na] + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:122) ~[na:na] + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:72) ~[na:na] + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) ~[gradle-worker.jar:na] + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) ~[gradle-worker.jar:na] +2025-10-29 10:29:39 [Test worker] WARN o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.boot.test.mock.mockito.MockitoTestExecutionListener] to prepare test instance [com.unicorn.hgzero.stt.controller.SimpleRecordingControllerTest@32c50b97] +java.lang.IllegalStateException: ApplicationContext failure threshold (1) exceeded: skipping repeated attempt to load context for [WebMergedContextConfiguration@9a7c39d testClass = com.unicorn.hgzero.stt.controller.SimpleRecordingControllerTest, locations = [], classes = [com.unicorn.hgzero.stt.SttApplication], contextInitializerClasses = [], activeProfiles = [], propertySourceDescriptors = [], propertySourceProperties = ["org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.OnFailureConditionReportContextCustomizerFactory$OnFailureConditionReportContextCustomizer@4da602fc, org.springframework.boot.test.autoconfigure.OverrideAutoConfigurationContextCustomizerFactory$DisableAutoConfigurationContextCustomizer@772739ee, org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@1f, org.springframework.boot.test.autoconfigure.filter.TypeExcludeFiltersContextCustomizer@a2178532, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@312191ab, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizer@57eda880, [ImportsContextCustomizer@6cf737db key = [org.springframework.boot.autoconfigure.task.TaskExecutionAutoConfiguration, org.springframework.boot.autoconfigure.cache.CacheAutoConfiguration, org.springframework.boot.autoconfigure.web.servlet.HttpEncodingAutoConfiguration, org.springframework.boot.autoconfigure.validation.ValidationAutoConfiguration, org.springframework.boot.autoconfigure.context.MessageSourceAutoConfiguration, org.springframework.boot.autoconfigure.hateoas.HypermediaAutoConfiguration, org.springframework.boot.autoconfigure.jackson.JacksonAutoConfiguration, org.springframework.boot.autoconfigure.data.web.SpringDataWebAutoConfiguration, org.springframework.boot.test.autoconfigure.web.reactive.WebTestClientAutoConfiguration, org.springframework.boot.autoconfigure.web.servlet.error.ErrorMvcAutoConfiguration, org.springframework.boot.test.autoconfigure.web.servlet.MockMvcAutoConfiguration, org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration, org.springframework.boot.autoconfigure.security.servlet.SecurityFilterAutoConfiguration, org.springframework.boot.autoconfigure.http.HttpMessageConvertersAutoConfiguration, org.springframework.boot.autoconfigure.security.oauth2.client.servlet.OAuth2ClientAutoConfiguration, org.springframework.boot.test.autoconfigure.web.servlet.MockMvcSecurityConfiguration, org.springframework.boot.test.autoconfigure.web.servlet.MockMvcWebClientAutoConfiguration, org.springframework.boot.test.autoconfigure.web.servlet.MockMvcWebDriverAutoConfiguration, org.springframework.boot.autoconfigure.thymeleaf.ThymeleafAutoConfiguration, org.springframework.boot.autoconfigure.gson.GsonAutoConfiguration, org.springframework.boot.autoconfigure.jsonb.JsonbAutoConfiguration, org.springframework.boot.autoconfigure.freemarker.FreeMarkerAutoConfiguration, org.springframework.boot.autoconfigure.web.servlet.WebMvcAutoConfiguration, org.springframework.boot.autoconfigure.security.servlet.UserDetailsServiceAutoConfiguration, org.springframework.boot.autoconfigure.security.oauth2.resource.servlet.OAuth2ResourceServerAutoConfiguration, org.springframework.boot.autoconfigure.groovy.template.GroovyTemplateAutoConfiguration, org.springframework.boot.autoconfigure.mustache.MustacheAutoConfiguration]], org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@5af3a0f, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@72cf2de5, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@de7c9eb0, org.springframework.boot.test.web.reactor.netty.DisableReactorResourceFactoryGlobalResourcesContextCustomizerFactory$DisableReactorResourceFactoryGlobalResourcesContextCustomizerCustomizer@47db5fa5, org.springframework.boot.test.context.SpringBootTestAnnotation@4f74f1a8], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:145) ~[spring-test-6.1.14.jar:6.1.14] + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:130) ~[spring-test-6.1.14.jar:6.1.14] + at org.springframework.boot.test.mock.mockito.MockitoTestExecutionListener.postProcessFields(MockitoTestExecutionListener.java:122) ~[spring-boot-test-3.3.5.jar:3.3.5] + at org.springframework.boot.test.mock.mockito.MockitoTestExecutionListener.injectFields(MockitoTestExecutionListener.java:106) ~[spring-boot-test-3.3.5.jar:3.3.5] + at org.springframework.boot.test.mock.mockito.MockitoTestExecutionListener.prepareTestInstance(MockitoTestExecutionListener.java:63) ~[spring-boot-test-3.3.5.jar:3.3.5] + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:260) ~[spring-test-6.1.14.jar:6.1.14] + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:163) ~[spring-test-6.1.14.jar:6.1.14] + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:378) ~[junit-jupiter-engine-5.10.5.jar:5.10.5] + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:383) ~[junit-jupiter-engine-5.10.5.jar:5.10.5] + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:378) ~[junit-jupiter-engine-5.10.5.jar:5.10.5] + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:215) ~[na:na] + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:197) ~[na:na] + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1709) ~[na:na] + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:570) ~[na:na] + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:560) ~[na:na] + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:315) ~[na:na] + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) ~[na:na] + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) ~[na:na] + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:807) ~[na:na] + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:377) ~[junit-jupiter-engine-5.10.5.jar:5.10.5] + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:290) ~[junit-jupiter-engine-5.10.5.jar:5.10.5] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:289) ~[junit-jupiter-engine-5.10.5.jar:5.10.5] + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:279) ~[junit-jupiter-engine-5.10.5.jar:5.10.5] + at java.base/java.util.Optional.orElseGet(Optional.java:364) ~[na:na] + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:278) ~[junit-jupiter-engine-5.10.5.jar:5.10.5] + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) ~[junit-jupiter-engine-5.10.5.jar:5.10.5] + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:106) ~[junit-jupiter-engine-5.10.5.jar:5.10.5] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:105) ~[junit-jupiter-engine-5.10.5.jar:5.10.5] + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:69) ~[junit-jupiter-engine-5.10.5.jar:5.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:128) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:128) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at java.base/java.util.ArrayList.forEach(ArrayList.java:1597) ~[na:na] + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:160) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:146) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:144) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:143) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:100) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at java.base/java.util.ArrayList.forEach(ArrayList.java:1597) ~[na:na] + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:160) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:146) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:144) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:143) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:100) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) ~[junit-platform-launcher-1.8.2.jar:1.8.2] + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) ~[junit-platform-launcher-1.8.2.jar:1.8.2] + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) ~[junit-platform-launcher-1.8.2.jar:1.8.2] + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) ~[junit-platform-launcher-1.8.2.jar:1.8.2] + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) ~[junit-platform-launcher-1.8.2.jar:1.8.2] + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) ~[junit-platform-launcher-1.8.2.jar:1.8.2] + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) ~[junit-platform-launcher-1.8.2.jar:1.8.2] + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) ~[junit-platform-launcher-1.8.2.jar:1.8.2] + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) ~[na:na] + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) ~[na:na] + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) ~[na:na] + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) ~[na:na] + at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103) ~[na:na] + at java.base/java.lang.reflect.Method.invoke(Method.java:580) ~[na:na] + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) ~[na:na] + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) ~[na:na] + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) ~[na:na] + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) ~[na:na] + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) ~[na:na] + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) ~[na:na] + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) ~[na:na] + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) ~[na:na] + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) ~[na:na] + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) ~[na:na] + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:122) ~[na:na] + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:72) ~[na:na] + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) ~[gradle-worker.jar:na] + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) ~[gradle-worker.jar:na] +2025-10-29 10:29:39 [Test worker] INFO o.s.t.c.s.AnnotationConfigContextLoaderUtils - Could not detect default configuration classes for test class [com.unicorn.hgzero.stt.integration.SttApiIntegrationTest]: SttApiIntegrationTest does not declare any static, non-private, non-final, nested classes annotated with @Configuration. +2025-10-29 10:29:39 [Test worker] INFO o.s.b.t.c.SpringBootTestContextBootstrapper - Found @SpringBootConfiguration com.unicorn.hgzero.stt.SttApplication for test class com.unicorn.hgzero.stt.integration.SttApiIntegrationTest +2025-10-29 10:29:40 [Test worker] INFO c.u.h.s.i.SttApiIntegrationTest - Starting SttApiIntegrationTest using Java 23.0.2 with PID 52337 (started by jominseo in /Users/jominseo/HGZero/stt) +2025-10-29 10:29:40 [Test worker] INFO c.u.h.s.i.SttApiIntegrationTest - The following 1 profile is active: "test" +2025-10-29 10:29:40 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration boolean -> org.hibernate.type.BasicTypeReference@476c137b +2025-10-29 10:29:40 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration boolean -> org.hibernate.type.BasicTypeReference@476c137b +2025-10-29 10:29:40 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Boolean -> org.hibernate.type.BasicTypeReference@476c137b +2025-10-29 10:29:40 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration numeric_boolean -> org.hibernate.type.BasicTypeReference@72c704f1 +2025-10-29 10:29:40 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration org.hibernate.type.NumericBooleanConverter -> org.hibernate.type.BasicTypeReference@72c704f1 +2025-10-29 10:29:40 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration true_false -> org.hibernate.type.BasicTypeReference@76f9e000 +2025-10-29 10:29:40 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration org.hibernate.type.TrueFalseConverter -> org.hibernate.type.BasicTypeReference@76f9e000 +2025-10-29 10:29:40 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration yes_no -> org.hibernate.type.BasicTypeReference@7612116b +2025-10-29 10:29:40 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration org.hibernate.type.YesNoConverter -> org.hibernate.type.BasicTypeReference@7612116b +2025-10-29 10:29:40 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration byte -> org.hibernate.type.BasicTypeReference@1c05097c +2025-10-29 10:29:40 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration byte -> org.hibernate.type.BasicTypeReference@1c05097c +2025-10-29 10:29:40 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Byte -> org.hibernate.type.BasicTypeReference@1c05097c +2025-10-29 10:29:40 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration binary -> org.hibernate.type.BasicTypeReference@562f6681 +2025-10-29 10:29:40 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration byte[] -> org.hibernate.type.BasicTypeReference@562f6681 +2025-10-29 10:29:40 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration [B -> org.hibernate.type.BasicTypeReference@562f6681 +2025-10-29 10:29:40 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration binary_wrapper -> org.hibernate.type.BasicTypeReference@6f6f65a4 +2025-10-29 10:29:40 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration wrapper-binary -> org.hibernate.type.BasicTypeReference@6f6f65a4 +2025-10-29 10:29:40 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration image -> org.hibernate.type.BasicTypeReference@990b86b +2025-10-29 10:29:40 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration blob -> org.hibernate.type.BasicTypeReference@3dea1ecc +2025-10-29 10:29:40 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.sql.Blob -> org.hibernate.type.BasicTypeReference@3dea1ecc +2025-10-29 10:29:40 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration materialized_blob -> org.hibernate.type.BasicTypeReference@105c6c9e +2025-10-29 10:29:40 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration materialized_blob_wrapper -> org.hibernate.type.BasicTypeReference@40a7974 +2025-10-29 10:29:40 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration short -> org.hibernate.type.BasicTypeReference@8d5da7e +2025-10-29 10:29:40 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration short -> org.hibernate.type.BasicTypeReference@8d5da7e +2025-10-29 10:29:40 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Short -> org.hibernate.type.BasicTypeReference@8d5da7e +2025-10-29 10:29:40 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration integer -> org.hibernate.type.BasicTypeReference@65a4b9d6 +2025-10-29 10:29:40 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration int -> org.hibernate.type.BasicTypeReference@65a4b9d6 +2025-10-29 10:29:40 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Integer -> org.hibernate.type.BasicTypeReference@65a4b9d6 +2025-10-29 10:29:40 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration long -> org.hibernate.type.BasicTypeReference@16ef1160 +2025-10-29 10:29:40 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration long -> org.hibernate.type.BasicTypeReference@16ef1160 +2025-10-29 10:29:40 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Long -> org.hibernate.type.BasicTypeReference@16ef1160 +2025-10-29 10:29:40 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration float -> org.hibernate.type.BasicTypeReference@41f90b10 +2025-10-29 10:29:40 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration float -> org.hibernate.type.BasicTypeReference@41f90b10 +2025-10-29 10:29:40 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Float -> org.hibernate.type.BasicTypeReference@41f90b10 +2025-10-29 10:29:40 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration double -> org.hibernate.type.BasicTypeReference@67593f7b +2025-10-29 10:29:40 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration double -> org.hibernate.type.BasicTypeReference@67593f7b +2025-10-29 10:29:40 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Double -> org.hibernate.type.BasicTypeReference@67593f7b +2025-10-29 10:29:40 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration big_integer -> org.hibernate.type.BasicTypeReference@2773504f +2025-10-29 10:29:40 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.math.BigInteger -> org.hibernate.type.BasicTypeReference@2773504f +2025-10-29 10:29:40 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration big_decimal -> org.hibernate.type.BasicTypeReference@497921d0 +2025-10-29 10:29:40 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.math.BigDecimal -> org.hibernate.type.BasicTypeReference@497921d0 +2025-10-29 10:29:40 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration character -> org.hibernate.type.BasicTypeReference@40d10264 +2025-10-29 10:29:40 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration char -> org.hibernate.type.BasicTypeReference@40d10264 +2025-10-29 10:29:40 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Character -> org.hibernate.type.BasicTypeReference@40d10264 +2025-10-29 10:29:40 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration character_nchar -> org.hibernate.type.BasicTypeReference@6edd4fe2 +2025-10-29 10:29:40 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration string -> org.hibernate.type.BasicTypeReference@53918b5e +2025-10-29 10:29:40 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.String -> org.hibernate.type.BasicTypeReference@53918b5e +2025-10-29 10:29:40 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration nstring -> org.hibernate.type.BasicTypeReference@5366575d +2025-10-29 10:29:40 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration characters -> org.hibernate.type.BasicTypeReference@1b6cad77 +2025-10-29 10:29:40 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration char[] -> org.hibernate.type.BasicTypeReference@1b6cad77 +2025-10-29 10:29:40 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration [C -> org.hibernate.type.BasicTypeReference@1b6cad77 +2025-10-29 10:29:40 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration wrapper-characters -> org.hibernate.type.BasicTypeReference@1fca53a7 +2025-10-29 10:29:40 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration text -> org.hibernate.type.BasicTypeReference@40dee07b +2025-10-29 10:29:40 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration ntext -> org.hibernate.type.BasicTypeReference@21e39b82 +2025-10-29 10:29:40 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration clob -> org.hibernate.type.BasicTypeReference@5f9a8ddc +2025-10-29 10:29:40 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.sql.Clob -> org.hibernate.type.BasicTypeReference@5f9a8ddc +2025-10-29 10:29:40 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration nclob -> org.hibernate.type.BasicTypeReference@1280bae3 +2025-10-29 10:29:40 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.sql.NClob -> org.hibernate.type.BasicTypeReference@1280bae3 +2025-10-29 10:29:40 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration materialized_clob -> org.hibernate.type.BasicTypeReference@256a5df0 +2025-10-29 10:29:40 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration materialized_clob_char_array -> org.hibernate.type.BasicTypeReference@1868ed54 +2025-10-29 10:29:40 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration materialized_clob_character_array -> org.hibernate.type.BasicTypeReference@131777e8 +2025-10-29 10:29:40 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration materialized_nclob -> org.hibernate.type.BasicTypeReference@45790cb +2025-10-29 10:29:40 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration materialized_nclob_character_array -> org.hibernate.type.BasicTypeReference@73a5d86c +2025-10-29 10:29:40 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration materialized_nclob_char_array -> org.hibernate.type.BasicTypeReference@2cf88901 +2025-10-29 10:29:40 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration Duration -> org.hibernate.type.BasicTypeReference@4780341 +2025-10-29 10:29:40 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.Duration -> org.hibernate.type.BasicTypeReference@4780341 +2025-10-29 10:29:40 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration LocalDateTime -> org.hibernate.type.BasicTypeReference@3c910acd +2025-10-29 10:29:40 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.LocalDateTime -> org.hibernate.type.BasicTypeReference@3c910acd +2025-10-29 10:29:40 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration LocalDate -> org.hibernate.type.BasicTypeReference@612ac38b +2025-10-29 10:29:40 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.LocalDate -> org.hibernate.type.BasicTypeReference@612ac38b +2025-10-29 10:29:40 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration LocalTime -> org.hibernate.type.BasicTypeReference@9f2fe2e +2025-10-29 10:29:40 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.LocalTime -> org.hibernate.type.BasicTypeReference@9f2fe2e +2025-10-29 10:29:40 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration OffsetDateTime -> org.hibernate.type.BasicTypeReference@4dd4965a +2025-10-29 10:29:40 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.OffsetDateTime -> org.hibernate.type.BasicTypeReference@4dd4965a +2025-10-29 10:29:40 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration OffsetDateTimeWithTimezone -> org.hibernate.type.BasicTypeReference@79273a4f +2025-10-29 10:29:40 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration OffsetDateTimeWithoutTimezone -> org.hibernate.type.BasicTypeReference@4e26987b +2025-10-29 10:29:40 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration OffsetTime -> org.hibernate.type.BasicTypeReference@50bb1c1f +2025-10-29 10:29:40 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.OffsetTime -> org.hibernate.type.BasicTypeReference@50bb1c1f +2025-10-29 10:29:40 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration OffsetTimeUtc -> org.hibernate.type.BasicTypeReference@39342614 +2025-10-29 10:29:40 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration OffsetTimeWithTimezone -> org.hibernate.type.BasicTypeReference@7981963f +2025-10-29 10:29:40 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration OffsetTimeWithoutTimezone -> org.hibernate.type.BasicTypeReference@31e3c34 +2025-10-29 10:29:40 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration ZonedDateTime -> org.hibernate.type.BasicTypeReference@b4d83ac +2025-10-29 10:29:40 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.ZonedDateTime -> org.hibernate.type.BasicTypeReference@b4d83ac +2025-10-29 10:29:40 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration ZonedDateTimeWithTimezone -> org.hibernate.type.BasicTypeReference@13d10057 +2025-10-29 10:29:40 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration ZonedDateTimeWithoutTimezone -> org.hibernate.type.BasicTypeReference@66944c7c +2025-10-29 10:29:40 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration date -> org.hibernate.type.BasicTypeReference@14993306 +2025-10-29 10:29:40 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.sql.Date -> org.hibernate.type.BasicTypeReference@14993306 +2025-10-29 10:29:40 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration time -> org.hibernate.type.BasicTypeReference@73ae82da +2025-10-29 10:29:40 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.sql.Time -> org.hibernate.type.BasicTypeReference@73ae82da +2025-10-29 10:29:40 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration timestamp -> org.hibernate.type.BasicTypeReference@6866e740 +2025-10-29 10:29:40 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.sql.Timestamp -> org.hibernate.type.BasicTypeReference@6866e740 +2025-10-29 10:29:40 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.util.Date -> org.hibernate.type.BasicTypeReference@6866e740 +2025-10-29 10:29:40 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration calendar -> org.hibernate.type.BasicTypeReference@2cd5b19c +2025-10-29 10:29:40 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.util.Calendar -> org.hibernate.type.BasicTypeReference@2cd5b19c +2025-10-29 10:29:40 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.util.GregorianCalendar -> org.hibernate.type.BasicTypeReference@2cd5b19c +2025-10-29 10:29:40 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration calendar_date -> org.hibernate.type.BasicTypeReference@7109b603 +2025-10-29 10:29:40 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration calendar_time -> org.hibernate.type.BasicTypeReference@76b642aa +2025-10-29 10:29:40 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration instant -> org.hibernate.type.BasicTypeReference@29b5e7db +2025-10-29 10:29:40 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.Instant -> org.hibernate.type.BasicTypeReference@29b5e7db +2025-10-29 10:29:40 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration uuid -> org.hibernate.type.BasicTypeReference@286dfa20 +2025-10-29 10:29:40 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.util.UUID -> org.hibernate.type.BasicTypeReference@286dfa20 +2025-10-29 10:29:40 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration pg-uuid -> org.hibernate.type.BasicTypeReference@286dfa20 +2025-10-29 10:29:40 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration uuid-binary -> org.hibernate.type.BasicTypeReference@1468e880 +2025-10-29 10:29:40 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration uuid-char -> org.hibernate.type.BasicTypeReference@508f4bb5 +2025-10-29 10:29:40 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration class -> org.hibernate.type.BasicTypeReference@5602e540 +2025-10-29 10:29:40 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Class -> org.hibernate.type.BasicTypeReference@5602e540 +2025-10-29 10:29:40 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration currency -> org.hibernate.type.BasicTypeReference@11f9b95a +2025-10-29 10:29:40 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration Currency -> org.hibernate.type.BasicTypeReference@11f9b95a +2025-10-29 10:29:40 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.util.Currency -> org.hibernate.type.BasicTypeReference@11f9b95a +2025-10-29 10:29:40 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration locale -> org.hibernate.type.BasicTypeReference@42066f0d +2025-10-29 10:29:40 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.util.Locale -> org.hibernate.type.BasicTypeReference@42066f0d +2025-10-29 10:29:40 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration serializable -> org.hibernate.type.BasicTypeReference@687e561b +2025-10-29 10:29:40 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.io.Serializable -> org.hibernate.type.BasicTypeReference@687e561b +2025-10-29 10:29:40 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration timezone -> org.hibernate.type.BasicTypeReference@299786b1 +2025-10-29 10:29:40 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.util.TimeZone -> org.hibernate.type.BasicTypeReference@299786b1 +2025-10-29 10:29:40 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration ZoneOffset -> org.hibernate.type.BasicTypeReference@75f8d9b0 +2025-10-29 10:29:40 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.ZoneOffset -> org.hibernate.type.BasicTypeReference@75f8d9b0 +2025-10-29 10:29:40 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration url -> org.hibernate.type.BasicTypeReference@4f7ae05 +2025-10-29 10:29:40 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.net.URL -> org.hibernate.type.BasicTypeReference@4f7ae05 +2025-10-29 10:29:40 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration vector -> org.hibernate.type.BasicTypeReference@1e23ee0e +2025-10-29 10:29:40 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration row_version -> org.hibernate.type.BasicTypeReference@b144175 +2025-10-29 10:29:40 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration object -> org.hibernate.type.JavaObjectType@55f6f965 +2025-10-29 10:29:40 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Object -> org.hibernate.type.JavaObjectType@55f6f965 +2025-10-29 10:29:40 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration null -> org.hibernate.type.NullType@257b3561 +2025-10-29 10:29:40 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration imm_date -> org.hibernate.type.BasicTypeReference@b46d595 +2025-10-29 10:29:40 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration imm_time -> org.hibernate.type.BasicTypeReference@5234f6c5 +2025-10-29 10:29:40 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration imm_timestamp -> org.hibernate.type.BasicTypeReference@50dffff3 +2025-10-29 10:29:40 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration imm_calendar -> org.hibernate.type.BasicTypeReference@366558a2 +2025-10-29 10:29:40 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration imm_calendar_date -> org.hibernate.type.BasicTypeReference@bb2c986 +2025-10-29 10:29:40 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration imm_calendar_time -> org.hibernate.type.BasicTypeReference@7ec594eb +2025-10-29 10:29:40 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration imm_binary -> org.hibernate.type.BasicTypeReference@514acca7 +2025-10-29 10:29:40 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration imm_serializable -> org.hibernate.type.BasicTypeReference@4df62e64 +2025-10-29 10:29:40 [Test worker] INFO com.zaxxer.hikari.HikariDataSource - HikariPool-2 - Starting... +2025-10-29 10:29:40 [Test worker] INFO com.zaxxer.hikari.pool.HikariPool - HikariPool-2 - Added connection conn5: url=jdbc:h2:mem:testdb user=SA +2025-10-29 10:29:40 [Test worker] INFO com.zaxxer.hikari.HikariDataSource - HikariPool-2 - Start completed. +2025-10-29 10:29:40 [Test worker] WARN org.hibernate.orm.deprecation - HHH90000025: H2Dialect does not need to be specified explicitly using 'hibernate.dialect' (remove the property setting and it will be selected by default) +2025-10-29 10:29:40 [Test worker] DEBUG o.h.t.d.jdbc.spi.JdbcTypeRegistry - addDescriptor(NCharTypeDescriptor) replaced previous registration(CharTypeDescriptor) +2025-10-29 10:29:40 [Test worker] DEBUG o.h.t.d.jdbc.spi.JdbcTypeRegistry - addDescriptor(NVarcharTypeDescriptor) replaced previous registration(VarcharTypeDescriptor) +2025-10-29 10:29:40 [Test worker] DEBUG o.h.t.d.jdbc.spi.JdbcTypeRegistry - addDescriptor(LongNVarcharTypeDescriptor) replaced previous registration(LongVarcharTypeDescriptor) +2025-10-29 10:29:40 [Test worker] DEBUG o.h.t.d.jdbc.spi.JdbcTypeRegistry - addDescriptor(NClobTypeDescriptor(DEFAULT)) replaced previous registration(ClobTypeDescriptor(DEFAULT)) +2025-10-29 10:29:40 [Test worker] DEBUG o.h.t.d.jdbc.spi.JdbcTypeRegistry - addDescriptor(2005, ClobTypeDescriptor(STREAM_BINDING)) replaced previous registration(ClobTypeDescriptor(DEFAULT)) +2025-10-29 10:29:40 [Test worker] DEBUG o.h.t.d.jdbc.spi.JdbcTypeRegistry - addDescriptor(TimestampUtcDescriptor) replaced previous registration(TimestampUtcDescriptor) +2025-10-29 10:29:40 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration org.hibernate.type.DurationType -> basicType@25(java.time.Duration,3015) +2025-10-29 10:29:40 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration Duration -> basicType@25(java.time.Duration,3015) +2025-10-29 10:29:40 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.Duration -> basicType@25(java.time.Duration,3015) +2025-10-29 10:29:40 [Test worker] DEBUG o.h.type.spi.TypeConfiguration$Scope - Scoping TypeConfiguration [org.hibernate.type.spi.TypeConfiguration@13fda74e] to MetadataBuildingContext [org.hibernate.boot.internal.MetadataBuildingContextRootImpl@50ed196f] +2025-10-29 10:29:40 [Test worker] DEBUG o.h.type.spi.TypeConfiguration$Scope - Scoping TypeConfiguration [org.hibernate.type.spi.TypeConfiguration@13fda74e] to SessionFactoryImplementor [org.hibernate.internal.SessionFactoryImpl@69020b9a] +2025-10-29 10:29:40 [Test worker] DEBUG org.hibernate.SQL - + drop table if exists recordings cascade +2025-10-29 10:29:40 [Test worker] DEBUG org.hibernate.SQL - + drop table if exists transcript_segments cascade +2025-10-29 10:29:40 [Test worker] DEBUG org.hibernate.SQL - + drop table if exists transcriptions cascade +2025-10-29 10:29:40 [Test worker] DEBUG org.hibernate.SQL - + create table recordings ( + duration integer, + segment_count integer, + speaker_count integer, + created_at timestamp(6) not null, + end_time timestamp(6), + start_time timestamp(6), + updated_at timestamp(6) not null, + language varchar(10) not null, + meeting_id varchar(50) not null, + recording_id varchar(50) not null, + session_id varchar(50) not null, + status enum ('COMPLETED','ERROR','READY','RECORDING','STOPPED') not null, + primary key (recording_id) + ) +2025-10-29 10:29:40 [Test worker] DEBUG org.hibernate.SQL - + create table transcript_segments ( + chunk_index integer, + confidence float(53), + duration float(53), + warning_flag boolean, + created_at timestamp(6) not null, + timestamp bigint not null, + updated_at timestamp(6) not null, + recording_id varchar(50) not null, + segment_id varchar(50) not null, + speaker_id varchar(50), + transcript_id varchar(50), + speaker_name varchar(100), + text TEXT not null, + primary key (segment_id) + ) +2025-10-29 10:29:40 [Test worker] DEBUG org.hibernate.SQL - + create table transcriptions ( + average_confidence float(53), + segment_count integer, + speaker_count integer, + total_duration integer, + completed_at timestamp(6), + created_at timestamp(6) not null, + updated_at timestamp(6) not null, + recording_id varchar(50) not null, + transcript_id varchar(50) not null, + full_text TEXT, + primary key (transcript_id) + ) +2025-10-29 10:29:40 [Test worker] TRACE o.h.type.spi.TypeConfiguration$Scope - Handling #sessionFactoryCreated from [org.hibernate.internal.SessionFactoryImpl@69020b9a] for TypeConfiguration +2025-10-29 10:29:40 [Test worker] INFO c.u.h.stt.service.AzureSpeechService - Azure Speech Service 초기화 완료 - Region: eastus, Language: ko-KR +2025-10-29 10:29:40 [Test worker] WARN o.s.b.a.o.j.JpaBaseConfiguration$JpaWebConfiguration - spring.jpa.open-in-view is enabled by default. Therefore, database queries may be performed during view rendering. Explicitly configure spring.jpa.open-in-view to disable this warning +2025-10-29 10:29:40 [Test worker] WARN o.s.b.a.s.s.UserDetailsServiceAutoConfiguration - + +Using generated security password: ad7bbe33-36fa-4f0b-8bab-26987576a5e7 + +This generated password is for development use only. Your security configuration must be updated before running your application in production. + +2025-10-29 10:29:40 [Test worker] WARN o.s.w.c.s.GenericWebApplicationContext - Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'createWebSocketContainer' defined in class path resource [com/unicorn/hgzero/stt/config/WebSocketConfig.class]: Attribute 'jakarta.websocket.server.ServerContainer' not found in ServletContext +2025-10-29 10:29:40 [Test worker] INFO c.u.h.stt.service.AzureSpeechService - Azure Speech Service 종료 +2025-10-29 10:29:40 [Test worker] DEBUG org.hibernate.SQL - + drop table if exists recordings cascade +2025-10-29 10:29:40 [Test worker] DEBUG org.hibernate.SQL - + drop table if exists transcript_segments cascade +2025-10-29 10:29:40 [Test worker] DEBUG org.hibernate.SQL - + drop table if exists transcriptions cascade +2025-10-29 10:29:40 [Test worker] TRACE o.h.type.spi.TypeConfiguration$Scope - Handling #sessionFactoryClosed from [org.hibernate.internal.SessionFactoryImpl@69020b9a] for TypeConfiguration +2025-10-29 10:29:40 [Test worker] DEBUG o.h.type.spi.TypeConfiguration$Scope - Un-scoping TypeConfiguration [org.hibernate.type.spi.TypeConfiguration$Scope@6f54230a] from SessionFactory [org.hibernate.internal.SessionFactoryImpl@69020b9a] +2025-10-29 10:29:40 [Test worker] INFO com.zaxxer.hikari.HikariDataSource - HikariPool-2 - Shutdown initiated... +2025-10-29 10:29:40 [Test worker] INFO com.zaxxer.hikari.HikariDataSource - HikariPool-2 - Shutdown completed. +2025-10-29 10:29:40 [Test worker] ERROR o.s.boot.SpringApplication - Application run failed +org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'createWebSocketContainer' defined in class path resource [com/unicorn/hgzero/stt/config/WebSocketConfig.class]: Attribute 'jakarta.websocket.server.ServerContainer' not found in ServletContext + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1806) ~[spring-beans-6.1.14.jar:6.1.14] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:600) ~[spring-beans-6.1.14.jar:6.1.14] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:522) ~[spring-beans-6.1.14.jar:6.1.14] + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:337) ~[spring-beans-6.1.14.jar:6.1.14] + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) ~[spring-beans-6.1.14.jar:6.1.14] + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:335) ~[spring-beans-6.1.14.jar:6.1.14] + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) ~[spring-beans-6.1.14.jar:6.1.14] + at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:969) ~[spring-beans-6.1.14.jar:6.1.14] + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:971) ~[spring-context-6.1.14.jar:6.1.14] + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:625) ~[spring-context-6.1.14.jar:6.1.14] + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:754) ~[spring-boot-3.3.5.jar:3.3.5] + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:456) ~[spring-boot-3.3.5.jar:3.3.5] + at org.springframework.boot.SpringApplication.run(SpringApplication.java:335) ~[spring-boot-3.3.5.jar:3.3.5] + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) ~[spring-boot-test-3.3.5.jar:3.3.5] + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:58) ~[spring-core-6.1.14.jar:6.1.14] + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:46) ~[spring-core-6.1.14.jar:6.1.14] + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1463) ~[spring-boot-3.3.5.jar:3.3.5] + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:553) ~[spring-boot-test-3.3.5.jar:3.3.5] + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) ~[spring-boot-test-3.3.5.jar:3.3.5] + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) ~[spring-boot-test-3.3.5.jar:3.3.5] + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:225) ~[spring-test-6.1.14.jar:6.1.14] + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:152) ~[spring-test-6.1.14.jar:6.1.14] + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:130) ~[spring-test-6.1.14.jar:6.1.14] + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) ~[spring-test-6.1.14.jar:6.1.14] + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) ~[spring-test-6.1.14.jar:6.1.14] + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:260) ~[spring-test-6.1.14.jar:6.1.14] + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:163) ~[spring-test-6.1.14.jar:6.1.14] + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:378) ~[junit-jupiter-engine-5.10.5.jar:5.10.5] + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:383) ~[junit-jupiter-engine-5.10.5.jar:5.10.5] + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:378) ~[junit-jupiter-engine-5.10.5.jar:5.10.5] + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:215) ~[na:na] + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:197) ~[na:na] + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1709) ~[na:na] + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:570) ~[na:na] + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:560) ~[na:na] + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:315) ~[na:na] + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) ~[na:na] + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) ~[na:na] + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:807) ~[na:na] + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:377) ~[junit-jupiter-engine-5.10.5.jar:5.10.5] + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:290) ~[junit-jupiter-engine-5.10.5.jar:5.10.5] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:289) ~[junit-jupiter-engine-5.10.5.jar:5.10.5] + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:279) ~[junit-jupiter-engine-5.10.5.jar:5.10.5] + at java.base/java.util.Optional.orElseGet(Optional.java:364) ~[na:na] + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:278) ~[junit-jupiter-engine-5.10.5.jar:5.10.5] + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) ~[junit-jupiter-engine-5.10.5.jar:5.10.5] + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:106) ~[junit-jupiter-engine-5.10.5.jar:5.10.5] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:105) ~[junit-jupiter-engine-5.10.5.jar:5.10.5] + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:69) ~[junit-jupiter-engine-5.10.5.jar:5.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:128) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:128) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at java.base/java.util.ArrayList.forEach(ArrayList.java:1597) ~[na:na] + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:160) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:146) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:144) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:143) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:100) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at java.base/java.util.ArrayList.forEach(ArrayList.java:1597) ~[na:na] + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:160) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:146) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:144) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:143) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:100) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) ~[junit-platform-launcher-1.8.2.jar:1.8.2] + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) ~[junit-platform-launcher-1.8.2.jar:1.8.2] + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) ~[junit-platform-launcher-1.8.2.jar:1.8.2] + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) ~[junit-platform-launcher-1.8.2.jar:1.8.2] + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) ~[junit-platform-launcher-1.8.2.jar:1.8.2] + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) ~[junit-platform-launcher-1.8.2.jar:1.8.2] + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) ~[junit-platform-launcher-1.8.2.jar:1.8.2] + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) ~[junit-platform-launcher-1.8.2.jar:1.8.2] + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) ~[na:na] + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) ~[na:na] + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) ~[na:na] + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) ~[na:na] + at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103) ~[na:na] + at java.base/java.lang.reflect.Method.invoke(Method.java:580) ~[na:na] + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) ~[na:na] + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) ~[na:na] + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) ~[na:na] + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) ~[na:na] + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) ~[na:na] + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) ~[na:na] + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) ~[na:na] + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) ~[na:na] + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) ~[na:na] + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) ~[na:na] + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:122) ~[na:na] + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:72) ~[na:na] + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) ~[gradle-worker.jar:na] + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) ~[gradle-worker.jar:na] +Caused by: java.lang.IllegalStateException: Attribute 'jakarta.websocket.server.ServerContainer' not found in ServletContext + at org.springframework.util.Assert.state(Assert.java:76) ~[spring-core-6.1.14.jar:6.1.14] + at org.springframework.web.socket.server.standard.ServletServerContainerFactoryBean.afterPropertiesSet(ServletServerContainerFactoryBean.java:117) ~[spring-websocket-6.1.14.jar:6.1.14] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1853) ~[spring-beans-6.1.14.jar:6.1.14] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1802) ~[spring-beans-6.1.14.jar:6.1.14] + ... 105 common frames omitted +2025-10-29 10:29:40 [Test worker] WARN o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [com.unicorn.hgzero.stt.integration.SttApiIntegrationTest@28b0eae9] +java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@1cc1ddad testClass = com.unicorn.hgzero.stt.integration.SttApiIntegrationTest, locations = [], classes = [com.unicorn.hgzero.stt.SttApplication], contextInitializerClasses = [], activeProfiles = ["test"], propertySourceDescriptors = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.OnFailureConditionReportContextCustomizerFactory$OnFailureConditionReportContextCustomizer@4da602fc, org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@1f, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizer@57eda880, [ImportsContextCustomizer@16869348 key = [org.springframework.boot.autoconfigure.task.TaskExecutionAutoConfiguration, org.springframework.boot.autoconfigure.web.servlet.HttpEncodingAutoConfiguration, org.springframework.boot.autoconfigure.validation.ValidationAutoConfiguration, org.springframework.boot.autoconfigure.context.MessageSourceAutoConfiguration, org.springframework.boot.autoconfigure.hateoas.HypermediaAutoConfiguration, org.springframework.boot.autoconfigure.jackson.JacksonAutoConfiguration, org.springframework.boot.autoconfigure.data.web.SpringDataWebAutoConfiguration, org.springframework.boot.autoconfigure.thymeleaf.ThymeleafAutoConfiguration, org.springframework.boot.autoconfigure.web.servlet.error.ErrorMvcAutoConfiguration, org.springframework.boot.autoconfigure.gson.GsonAutoConfiguration, org.springframework.boot.autoconfigure.jsonb.JsonbAutoConfiguration, org.springframework.boot.autoconfigure.freemarker.FreeMarkerAutoConfiguration, org.springframework.boot.autoconfigure.web.servlet.WebMvcAutoConfiguration, org.springframework.boot.autoconfigure.http.HttpMessageConvertersAutoConfiguration, org.springframework.boot.autoconfigure.groovy.template.GroovyTemplateAutoConfiguration, org.springframework.boot.autoconfigure.mustache.MustacheAutoConfiguration]], org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@5af3a0f, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@72cf2de5, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@f3fd67a0, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@7b324585, org.springframework.boot.test.web.reactor.netty.DisableReactorResourceFactoryGlobalResourcesContextCustomizerFactory$DisableReactorResourceFactoryGlobalResourcesContextCustomizerCustomizer@47db5fa5, org.springframework.boot.test.context.SpringBootTestAnnotation@72923d15], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:180) ~[spring-test-6.1.14.jar:6.1.14] + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:130) ~[spring-test-6.1.14.jar:6.1.14] + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) ~[spring-test-6.1.14.jar:6.1.14] + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) ~[spring-test-6.1.14.jar:6.1.14] + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:260) ~[spring-test-6.1.14.jar:6.1.14] + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:163) ~[spring-test-6.1.14.jar:6.1.14] + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:378) ~[junit-jupiter-engine-5.10.5.jar:5.10.5] + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:383) ~[junit-jupiter-engine-5.10.5.jar:5.10.5] + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:378) ~[junit-jupiter-engine-5.10.5.jar:5.10.5] + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:215) ~[na:na] + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:197) ~[na:na] + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1709) ~[na:na] + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:570) ~[na:na] + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:560) ~[na:na] + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:315) ~[na:na] + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) ~[na:na] + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) ~[na:na] + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:807) ~[na:na] + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:377) ~[junit-jupiter-engine-5.10.5.jar:5.10.5] + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:290) ~[junit-jupiter-engine-5.10.5.jar:5.10.5] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:289) ~[junit-jupiter-engine-5.10.5.jar:5.10.5] + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:279) ~[junit-jupiter-engine-5.10.5.jar:5.10.5] + at java.base/java.util.Optional.orElseGet(Optional.java:364) ~[na:na] + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:278) ~[junit-jupiter-engine-5.10.5.jar:5.10.5] + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) ~[junit-jupiter-engine-5.10.5.jar:5.10.5] + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:106) ~[junit-jupiter-engine-5.10.5.jar:5.10.5] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:105) ~[junit-jupiter-engine-5.10.5.jar:5.10.5] + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:69) ~[junit-jupiter-engine-5.10.5.jar:5.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:128) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:128) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at java.base/java.util.ArrayList.forEach(ArrayList.java:1597) ~[na:na] + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:160) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:146) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:144) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:143) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:100) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at java.base/java.util.ArrayList.forEach(ArrayList.java:1597) ~[na:na] + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:160) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:146) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:144) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:143) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:100) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) ~[junit-platform-launcher-1.8.2.jar:1.8.2] + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) ~[junit-platform-launcher-1.8.2.jar:1.8.2] + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) ~[junit-platform-launcher-1.8.2.jar:1.8.2] + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) ~[junit-platform-launcher-1.8.2.jar:1.8.2] + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) ~[junit-platform-launcher-1.8.2.jar:1.8.2] + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) ~[junit-platform-launcher-1.8.2.jar:1.8.2] + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) ~[junit-platform-launcher-1.8.2.jar:1.8.2] + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) ~[junit-platform-launcher-1.8.2.jar:1.8.2] + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) ~[na:na] + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) ~[na:na] + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) ~[na:na] + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) ~[na:na] + at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103) ~[na:na] + at java.base/java.lang.reflect.Method.invoke(Method.java:580) ~[na:na] + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) ~[na:na] + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) ~[na:na] + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) ~[na:na] + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) ~[na:na] + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) ~[na:na] + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) ~[na:na] + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) ~[na:na] + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) ~[na:na] + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) ~[na:na] + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) ~[na:na] + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:122) ~[na:na] + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:72) ~[na:na] + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) ~[gradle-worker.jar:na] + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) ~[gradle-worker.jar:na] +Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'createWebSocketContainer' defined in class path resource [com/unicorn/hgzero/stt/config/WebSocketConfig.class]: Attribute 'jakarta.websocket.server.ServerContainer' not found in ServletContext + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1806) ~[spring-beans-6.1.14.jar:6.1.14] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:600) ~[spring-beans-6.1.14.jar:6.1.14] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:522) ~[spring-beans-6.1.14.jar:6.1.14] + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:337) ~[spring-beans-6.1.14.jar:6.1.14] + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) ~[spring-beans-6.1.14.jar:6.1.14] + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:335) ~[spring-beans-6.1.14.jar:6.1.14] + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) ~[spring-beans-6.1.14.jar:6.1.14] + at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:969) ~[spring-beans-6.1.14.jar:6.1.14] + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:971) ~[spring-context-6.1.14.jar:6.1.14] + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:625) ~[spring-context-6.1.14.jar:6.1.14] + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:754) ~[spring-boot-3.3.5.jar:3.3.5] + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:456) ~[spring-boot-3.3.5.jar:3.3.5] + at org.springframework.boot.SpringApplication.run(SpringApplication.java:335) ~[spring-boot-3.3.5.jar:3.3.5] + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) ~[spring-boot-test-3.3.5.jar:3.3.5] + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:58) ~[spring-core-6.1.14.jar:6.1.14] + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:46) ~[spring-core-6.1.14.jar:6.1.14] + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1463) ~[spring-boot-3.3.5.jar:3.3.5] + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:553) ~[spring-boot-test-3.3.5.jar:3.3.5] + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) ~[spring-boot-test-3.3.5.jar:3.3.5] + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) ~[spring-boot-test-3.3.5.jar:3.3.5] + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:225) ~[spring-test-6.1.14.jar:6.1.14] + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:152) ~[spring-test-6.1.14.jar:6.1.14] + ... 84 common frames omitted +Caused by: java.lang.IllegalStateException: Attribute 'jakarta.websocket.server.ServerContainer' not found in ServletContext + at org.springframework.util.Assert.state(Assert.java:76) ~[spring-core-6.1.14.jar:6.1.14] + at org.springframework.web.socket.server.standard.ServletServerContainerFactoryBean.afterPropertiesSet(ServletServerContainerFactoryBean.java:117) ~[spring-websocket-6.1.14.jar:6.1.14] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1853) ~[spring-beans-6.1.14.jar:6.1.14] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1802) ~[spring-beans-6.1.14.jar:6.1.14] + ... 105 common frames omitted +2025-10-29 10:29:40 [Test worker] WARN o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [com.unicorn.hgzero.stt.integration.SttApiIntegrationTest@4a192cc6] +java.lang.IllegalStateException: ApplicationContext failure threshold (1) exceeded: skipping repeated attempt to load context for [WebMergedContextConfiguration@1cc1ddad testClass = com.unicorn.hgzero.stt.integration.SttApiIntegrationTest, locations = [], classes = [com.unicorn.hgzero.stt.SttApplication], contextInitializerClasses = [], activeProfiles = ["test"], propertySourceDescriptors = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.OnFailureConditionReportContextCustomizerFactory$OnFailureConditionReportContextCustomizer@4da602fc, org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@1f, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizer@57eda880, [ImportsContextCustomizer@16869348 key = [org.springframework.boot.autoconfigure.task.TaskExecutionAutoConfiguration, org.springframework.boot.autoconfigure.web.servlet.HttpEncodingAutoConfiguration, org.springframework.boot.autoconfigure.validation.ValidationAutoConfiguration, org.springframework.boot.autoconfigure.context.MessageSourceAutoConfiguration, org.springframework.boot.autoconfigure.hateoas.HypermediaAutoConfiguration, org.springframework.boot.autoconfigure.jackson.JacksonAutoConfiguration, org.springframework.boot.autoconfigure.data.web.SpringDataWebAutoConfiguration, org.springframework.boot.autoconfigure.thymeleaf.ThymeleafAutoConfiguration, org.springframework.boot.autoconfigure.web.servlet.error.ErrorMvcAutoConfiguration, org.springframework.boot.autoconfigure.gson.GsonAutoConfiguration, org.springframework.boot.autoconfigure.jsonb.JsonbAutoConfiguration, org.springframework.boot.autoconfigure.freemarker.FreeMarkerAutoConfiguration, org.springframework.boot.autoconfigure.web.servlet.WebMvcAutoConfiguration, org.springframework.boot.autoconfigure.http.HttpMessageConvertersAutoConfiguration, org.springframework.boot.autoconfigure.groovy.template.GroovyTemplateAutoConfiguration, org.springframework.boot.autoconfigure.mustache.MustacheAutoConfiguration]], org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@5af3a0f, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@72cf2de5, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@f3fd67a0, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@7b324585, org.springframework.boot.test.web.reactor.netty.DisableReactorResourceFactoryGlobalResourcesContextCustomizerFactory$DisableReactorResourceFactoryGlobalResourcesContextCustomizerCustomizer@47db5fa5, org.springframework.boot.test.context.SpringBootTestAnnotation@72923d15], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:145) ~[spring-test-6.1.14.jar:6.1.14] + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:130) ~[spring-test-6.1.14.jar:6.1.14] + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) ~[spring-test-6.1.14.jar:6.1.14] + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) ~[spring-test-6.1.14.jar:6.1.14] + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:260) ~[spring-test-6.1.14.jar:6.1.14] + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:163) ~[spring-test-6.1.14.jar:6.1.14] + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:378) ~[junit-jupiter-engine-5.10.5.jar:5.10.5] + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:383) ~[junit-jupiter-engine-5.10.5.jar:5.10.5] + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:378) ~[junit-jupiter-engine-5.10.5.jar:5.10.5] + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:215) ~[na:na] + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:197) ~[na:na] + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1709) ~[na:na] + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:570) ~[na:na] + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:560) ~[na:na] + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:315) ~[na:na] + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) ~[na:na] + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) ~[na:na] + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:807) ~[na:na] + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:377) ~[junit-jupiter-engine-5.10.5.jar:5.10.5] + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:290) ~[junit-jupiter-engine-5.10.5.jar:5.10.5] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:289) ~[junit-jupiter-engine-5.10.5.jar:5.10.5] + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:279) ~[junit-jupiter-engine-5.10.5.jar:5.10.5] + at java.base/java.util.Optional.orElseGet(Optional.java:364) ~[na:na] + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:278) ~[junit-jupiter-engine-5.10.5.jar:5.10.5] + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) ~[junit-jupiter-engine-5.10.5.jar:5.10.5] + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:106) ~[junit-jupiter-engine-5.10.5.jar:5.10.5] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:105) ~[junit-jupiter-engine-5.10.5.jar:5.10.5] + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:69) ~[junit-jupiter-engine-5.10.5.jar:5.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:128) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:128) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at java.base/java.util.ArrayList.forEach(ArrayList.java:1597) ~[na:na] + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:160) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:146) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:144) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:143) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:100) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at java.base/java.util.ArrayList.forEach(ArrayList.java:1597) ~[na:na] + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:160) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:146) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:144) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:143) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:100) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) ~[junit-platform-launcher-1.8.2.jar:1.8.2] + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) ~[junit-platform-launcher-1.8.2.jar:1.8.2] + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) ~[junit-platform-launcher-1.8.2.jar:1.8.2] + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) ~[junit-platform-launcher-1.8.2.jar:1.8.2] + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) ~[junit-platform-launcher-1.8.2.jar:1.8.2] + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) ~[junit-platform-launcher-1.8.2.jar:1.8.2] + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) ~[junit-platform-launcher-1.8.2.jar:1.8.2] + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) ~[junit-platform-launcher-1.8.2.jar:1.8.2] + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) ~[na:na] + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) ~[na:na] + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) ~[na:na] + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) ~[na:na] + at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103) ~[na:na] + at java.base/java.lang.reflect.Method.invoke(Method.java:580) ~[na:na] + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) ~[na:na] + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) ~[na:na] + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) ~[na:na] + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) ~[na:na] + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) ~[na:na] + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) ~[na:na] + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) ~[na:na] + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) ~[na:na] + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) ~[na:na] + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) ~[na:na] + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:122) ~[na:na] + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:72) ~[na:na] + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) ~[gradle-worker.jar:na] + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) ~[gradle-worker.jar:na] +2025-10-29 10:29:40 [Test worker] WARN o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [com.unicorn.hgzero.stt.integration.SttApiIntegrationTest@476fb241] +java.lang.IllegalStateException: ApplicationContext failure threshold (1) exceeded: skipping repeated attempt to load context for [WebMergedContextConfiguration@1cc1ddad testClass = com.unicorn.hgzero.stt.integration.SttApiIntegrationTest, locations = [], classes = [com.unicorn.hgzero.stt.SttApplication], contextInitializerClasses = [], activeProfiles = ["test"], propertySourceDescriptors = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.OnFailureConditionReportContextCustomizerFactory$OnFailureConditionReportContextCustomizer@4da602fc, org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@1f, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizer@57eda880, [ImportsContextCustomizer@16869348 key = [org.springframework.boot.autoconfigure.task.TaskExecutionAutoConfiguration, org.springframework.boot.autoconfigure.web.servlet.HttpEncodingAutoConfiguration, org.springframework.boot.autoconfigure.validation.ValidationAutoConfiguration, org.springframework.boot.autoconfigure.context.MessageSourceAutoConfiguration, org.springframework.boot.autoconfigure.hateoas.HypermediaAutoConfiguration, org.springframework.boot.autoconfigure.jackson.JacksonAutoConfiguration, org.springframework.boot.autoconfigure.data.web.SpringDataWebAutoConfiguration, org.springframework.boot.autoconfigure.thymeleaf.ThymeleafAutoConfiguration, org.springframework.boot.autoconfigure.web.servlet.error.ErrorMvcAutoConfiguration, org.springframework.boot.autoconfigure.gson.GsonAutoConfiguration, org.springframework.boot.autoconfigure.jsonb.JsonbAutoConfiguration, org.springframework.boot.autoconfigure.freemarker.FreeMarkerAutoConfiguration, org.springframework.boot.autoconfigure.web.servlet.WebMvcAutoConfiguration, org.springframework.boot.autoconfigure.http.HttpMessageConvertersAutoConfiguration, org.springframework.boot.autoconfigure.groovy.template.GroovyTemplateAutoConfiguration, org.springframework.boot.autoconfigure.mustache.MustacheAutoConfiguration]], org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@5af3a0f, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@72cf2de5, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@f3fd67a0, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@7b324585, org.springframework.boot.test.web.reactor.netty.DisableReactorResourceFactoryGlobalResourcesContextCustomizerFactory$DisableReactorResourceFactoryGlobalResourcesContextCustomizerCustomizer@47db5fa5, org.springframework.boot.test.context.SpringBootTestAnnotation@72923d15], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:145) ~[spring-test-6.1.14.jar:6.1.14] + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:130) ~[spring-test-6.1.14.jar:6.1.14] + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) ~[spring-test-6.1.14.jar:6.1.14] + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) ~[spring-test-6.1.14.jar:6.1.14] + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:260) ~[spring-test-6.1.14.jar:6.1.14] + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:163) ~[spring-test-6.1.14.jar:6.1.14] + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:378) ~[junit-jupiter-engine-5.10.5.jar:5.10.5] + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:383) ~[junit-jupiter-engine-5.10.5.jar:5.10.5] + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:378) ~[junit-jupiter-engine-5.10.5.jar:5.10.5] + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:215) ~[na:na] + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:197) ~[na:na] + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1709) ~[na:na] + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:570) ~[na:na] + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:560) ~[na:na] + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:315) ~[na:na] + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) ~[na:na] + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) ~[na:na] + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:807) ~[na:na] + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:377) ~[junit-jupiter-engine-5.10.5.jar:5.10.5] + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:290) ~[junit-jupiter-engine-5.10.5.jar:5.10.5] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:289) ~[junit-jupiter-engine-5.10.5.jar:5.10.5] + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:279) ~[junit-jupiter-engine-5.10.5.jar:5.10.5] + at java.base/java.util.Optional.orElseGet(Optional.java:364) ~[na:na] + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:278) ~[junit-jupiter-engine-5.10.5.jar:5.10.5] + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) ~[junit-jupiter-engine-5.10.5.jar:5.10.5] + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:106) ~[junit-jupiter-engine-5.10.5.jar:5.10.5] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:105) ~[junit-jupiter-engine-5.10.5.jar:5.10.5] + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:69) ~[junit-jupiter-engine-5.10.5.jar:5.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:128) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:128) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at java.base/java.util.ArrayList.forEach(ArrayList.java:1597) ~[na:na] + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:160) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:146) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:144) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:143) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:100) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at java.base/java.util.ArrayList.forEach(ArrayList.java:1597) ~[na:na] + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:160) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:146) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:144) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:143) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:100) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) ~[junit-platform-launcher-1.8.2.jar:1.8.2] + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) ~[junit-platform-launcher-1.8.2.jar:1.8.2] + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) ~[junit-platform-launcher-1.8.2.jar:1.8.2] + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) ~[junit-platform-launcher-1.8.2.jar:1.8.2] + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) ~[junit-platform-launcher-1.8.2.jar:1.8.2] + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) ~[junit-platform-launcher-1.8.2.jar:1.8.2] + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) ~[junit-platform-launcher-1.8.2.jar:1.8.2] + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) ~[junit-platform-launcher-1.8.2.jar:1.8.2] + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) ~[na:na] + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) ~[na:na] + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) ~[na:na] + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) ~[na:na] + at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103) ~[na:na] + at java.base/java.lang.reflect.Method.invoke(Method.java:580) ~[na:na] + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) ~[na:na] + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) ~[na:na] + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) ~[na:na] + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) ~[na:na] + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) ~[na:na] + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) ~[na:na] + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) ~[na:na] + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) ~[na:na] + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) ~[na:na] + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) ~[na:na] + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:122) ~[na:na] + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:72) ~[na:na] + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) ~[gradle-worker.jar:na] + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) ~[gradle-worker.jar:na] +2025-10-29 10:29:40 [Test worker] INFO c.u.h.s.service.RecordingServiceImpl - 녹음 준비 시작 - meetingId: MEETING-001, sessionId: SESSION-001 +2025-10-29 10:29:40 [Test worker] INFO c.u.h.s.service.RecordingServiceImpl - 녹음 준비 완료 - recordingId: REC-20251029-936 +2025-10-29 10:29:40 [Test worker] INFO c.u.h.s.service.RecordingServiceImpl - 녹음 중지 - recordingId: REC-20250123-001, stoppedBy: user001 +2025-10-29 10:29:40 [Test worker] INFO c.u.h.s.service.RecordingServiceImpl - 녹음 중지 완료 - recordingId: REC-20250123-001, duration: 1800초 +2025-10-29 10:29:40 [Test worker] INFO c.u.h.s.service.RecordingServiceImpl - 녹음 준비 시작 - meetingId: MEETING-001, sessionId: SESSION-001 +2025-10-29 10:29:40 [Test worker] INFO c.u.h.s.service.RecordingServiceImpl - 녹음 시작 - recordingId: REC-20250123-001, startedBy: user001 +2025-10-29 10:29:40 [Test worker] INFO c.u.h.s.service.RecordingServiceImpl - 녹음 시작 - recordingId: REC-20250123-001, startedBy: user001 +2025-10-29 10:29:40 [Test worker] INFO c.u.h.s.service.RecordingServiceImpl - 녹음 시작 완료 - recordingId: REC-20250123-001 +2025-10-29 10:29:40 [Test worker] INFO c.u.h.s.s.TranscriptionServiceImpl - 실시간 음성 변환 처리 - recordingId: REC-20250123-001, timestamp: 1761701380645 +2025-10-29 10:29:40 [Test worker] INFO c.u.h.s.s.TranscriptionServiceImpl - 실시간 음성 변환 처리 - recordingId: REC-20250123-001, timestamp: 1761701380648 +2025-10-29 10:29:40 [Test worker] INFO c.u.h.s.s.TranscriptionServiceImpl - 실시간 음성 변환 완료 - segmentId: TRS-SEG-A3C34174, confidence: 0.957196000236075 +2025-10-29 10:29:40 [Test worker] INFO c.u.h.s.s.TranscriptionServiceImpl - 실시간 음성 변환 처리 - recordingId: REC-20250123-001, timestamp: 1761701380652 +2025-10-29 10:29:40 [Test worker] INFO c.u.h.s.s.TranscriptionServiceImpl - 실시간 음성 변환 완료 - segmentId: TRS-SEG-FDDC9875, confidence: 0.9957000802983886 +2025-10-29 10:29:43 [main] INFO c.unicorn.hgzero.stt.SttApplication - Starting SttApplication using Java 23.0.2 with PID 52370 (/Users/jominseo/HGZero/stt/build/classes/java/main started by jominseo in /Users/jominseo/HGZero/stt) +2025-10-29 10:29:43 [main] DEBUG c.unicorn.hgzero.stt.SttApplication - Running with Spring Boot v3.3.5, Spring v6.1.14 +2025-10-29 10:29:43 [main] INFO c.unicorn.hgzero.stt.SttApplication - No active profile set, falling back to 1 default profile: "default" +2025-10-29 10:29:43 [main] INFO o.s.d.r.c.RepositoryConfigurationDelegate - Multiple Spring Data modules found, entering strict repository configuration mode +2025-10-29 10:29:43 [main] INFO o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data JPA repositories in DEFAULT mode. +2025-10-29 10:29:43 [main] INFO o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 41 ms. Found 3 JPA repository interfaces. +2025-10-29 10:29:43 [main] INFO o.s.d.r.c.RepositoryConfigurationDelegate - Multiple Spring Data modules found, entering strict repository configuration mode +2025-10-29 10:29:43 [main] INFO o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data Redis repositories in DEFAULT mode. +2025-10-29 10:29:43 [main] INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.unicorn.hgzero.stt.repository.jpa.RecordingRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-10-29 10:29:43 [main] INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.unicorn.hgzero.stt.repository.jpa.TranscriptSegmentRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-10-29 10:29:43 [main] INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.unicorn.hgzero.stt.repository.jpa.TranscriptionRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-10-29 10:29:43 [main] INFO o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 6 ms. Found 0 Redis repository interfaces. +2025-10-29 10:29:43 [main] INFO o.s.b.w.e.tomcat.TomcatWebServer - Tomcat initialized with port 8084 (http) +2025-10-29 10:29:43 [main] INFO o.a.catalina.core.StandardService - Starting service [Tomcat] +2025-10-29 10:29:43 [main] INFO o.a.catalina.core.StandardEngine - Starting Servlet engine: [Apache Tomcat/10.1.31] +2025-10-29 10:29:43 [main] INFO o.a.c.c.C.[Tomcat].[localhost].[/] - Initializing Spring embedded WebApplicationContext +2025-10-29 10:29:43 [main] INFO o.s.b.w.s.c.ServletWebServerApplicationContext - Root WebApplicationContext: initialization completed in 681 ms +2025-10-29 10:29:44 [main] INFO o.h.jpa.internal.util.LogHelper - HHH000204: Processing PersistenceUnitInfo [name: default] +2025-10-29 10:29:44 [main] INFO org.hibernate.Version - HHH000412: Hibernate ORM core version 6.5.3.Final +2025-10-29 10:29:44 [main] INFO o.h.c.i.RegionFactoryInitiator - HHH000026: Second-level cache disabled +2025-10-29 10:29:44 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration boolean -> org.hibernate.type.BasicTypeReference@d677be9 +2025-10-29 10:29:44 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration boolean -> org.hibernate.type.BasicTypeReference@d677be9 +2025-10-29 10:29:44 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Boolean -> org.hibernate.type.BasicTypeReference@d677be9 +2025-10-29 10:29:44 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration numeric_boolean -> org.hibernate.type.BasicTypeReference@fefb66c +2025-10-29 10:29:44 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration org.hibernate.type.NumericBooleanConverter -> org.hibernate.type.BasicTypeReference@fefb66c +2025-10-29 10:29:44 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration true_false -> org.hibernate.type.BasicTypeReference@6d7556a8 +2025-10-29 10:29:44 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration org.hibernate.type.TrueFalseConverter -> org.hibernate.type.BasicTypeReference@6d7556a8 +2025-10-29 10:29:44 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration yes_no -> org.hibernate.type.BasicTypeReference@48860139 +2025-10-29 10:29:44 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration org.hibernate.type.YesNoConverter -> org.hibernate.type.BasicTypeReference@48860139 +2025-10-29 10:29:44 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration byte -> org.hibernate.type.BasicTypeReference@7e0883f3 +2025-10-29 10:29:44 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration byte -> org.hibernate.type.BasicTypeReference@7e0883f3 +2025-10-29 10:29:44 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Byte -> org.hibernate.type.BasicTypeReference@7e0883f3 +2025-10-29 10:29:44 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration binary -> org.hibernate.type.BasicTypeReference@ca60688 +2025-10-29 10:29:44 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration byte[] -> org.hibernate.type.BasicTypeReference@ca60688 +2025-10-29 10:29:44 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration [B -> org.hibernate.type.BasicTypeReference@ca60688 +2025-10-29 10:29:44 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration binary_wrapper -> org.hibernate.type.BasicTypeReference@4ba1c1a2 +2025-10-29 10:29:44 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration wrapper-binary -> org.hibernate.type.BasicTypeReference@4ba1c1a2 +2025-10-29 10:29:44 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration image -> org.hibernate.type.BasicTypeReference@33568e26 +2025-10-29 10:29:44 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration blob -> org.hibernate.type.BasicTypeReference@97b84a4 +2025-10-29 10:29:44 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.sql.Blob -> org.hibernate.type.BasicTypeReference@97b84a4 +2025-10-29 10:29:44 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration materialized_blob -> org.hibernate.type.BasicTypeReference@35555145 +2025-10-29 10:29:44 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration materialized_blob_wrapper -> org.hibernate.type.BasicTypeReference@70bc3a9c +2025-10-29 10:29:44 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration short -> org.hibernate.type.BasicTypeReference@771cbd13 +2025-10-29 10:29:44 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration short -> org.hibernate.type.BasicTypeReference@771cbd13 +2025-10-29 10:29:44 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Short -> org.hibernate.type.BasicTypeReference@771cbd13 +2025-10-29 10:29:44 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration integer -> org.hibernate.type.BasicTypeReference@229749f0 +2025-10-29 10:29:44 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration int -> org.hibernate.type.BasicTypeReference@229749f0 +2025-10-29 10:29:44 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Integer -> org.hibernate.type.BasicTypeReference@229749f0 +2025-10-29 10:29:44 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration long -> org.hibernate.type.BasicTypeReference@3d57fb9e +2025-10-29 10:29:44 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration long -> org.hibernate.type.BasicTypeReference@3d57fb9e +2025-10-29 10:29:44 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Long -> org.hibernate.type.BasicTypeReference@3d57fb9e +2025-10-29 10:29:44 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration float -> org.hibernate.type.BasicTypeReference@2c2e5e72 +2025-10-29 10:29:44 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration float -> org.hibernate.type.BasicTypeReference@2c2e5e72 +2025-10-29 10:29:44 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Float -> org.hibernate.type.BasicTypeReference@2c2e5e72 +2025-10-29 10:29:44 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration double -> org.hibernate.type.BasicTypeReference@3e489ac1 +2025-10-29 10:29:44 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration double -> org.hibernate.type.BasicTypeReference@3e489ac1 +2025-10-29 10:29:44 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Double -> org.hibernate.type.BasicTypeReference@3e489ac1 +2025-10-29 10:29:44 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration big_integer -> org.hibernate.type.BasicTypeReference@26888c31 +2025-10-29 10:29:44 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.math.BigInteger -> org.hibernate.type.BasicTypeReference@26888c31 +2025-10-29 10:29:44 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration big_decimal -> org.hibernate.type.BasicTypeReference@24010875 +2025-10-29 10:29:44 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.math.BigDecimal -> org.hibernate.type.BasicTypeReference@24010875 +2025-10-29 10:29:44 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration character -> org.hibernate.type.BasicTypeReference@7a021f49 +2025-10-29 10:29:44 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration char -> org.hibernate.type.BasicTypeReference@7a021f49 +2025-10-29 10:29:44 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Character -> org.hibernate.type.BasicTypeReference@7a021f49 +2025-10-29 10:29:44 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration character_nchar -> org.hibernate.type.BasicTypeReference@e60c5a +2025-10-29 10:29:44 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration string -> org.hibernate.type.BasicTypeReference@626df173 +2025-10-29 10:29:44 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.String -> org.hibernate.type.BasicTypeReference@626df173 +2025-10-29 10:29:44 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration nstring -> org.hibernate.type.BasicTypeReference@4e030feb +2025-10-29 10:29:44 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration characters -> org.hibernate.type.BasicTypeReference@2411b935 +2025-10-29 10:29:44 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration char[] -> org.hibernate.type.BasicTypeReference@2411b935 +2025-10-29 10:29:44 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration [C -> org.hibernate.type.BasicTypeReference@2411b935 +2025-10-29 10:29:44 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration wrapper-characters -> org.hibernate.type.BasicTypeReference@1425e531 +2025-10-29 10:29:44 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration text -> org.hibernate.type.BasicTypeReference@194e78af +2025-10-29 10:29:44 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration ntext -> org.hibernate.type.BasicTypeReference@4fe4503a +2025-10-29 10:29:44 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration clob -> org.hibernate.type.BasicTypeReference@669580e2 +2025-10-29 10:29:44 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.sql.Clob -> org.hibernate.type.BasicTypeReference@669580e2 +2025-10-29 10:29:44 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration nclob -> org.hibernate.type.BasicTypeReference@5d22ed6c +2025-10-29 10:29:44 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.sql.NClob -> org.hibernate.type.BasicTypeReference@5d22ed6c +2025-10-29 10:29:44 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration materialized_clob -> org.hibernate.type.BasicTypeReference@37c37d67 +2025-10-29 10:29:44 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration materialized_clob_char_array -> org.hibernate.type.BasicTypeReference@5a4b8e25 +2025-10-29 10:29:44 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration materialized_clob_character_array -> org.hibernate.type.BasicTypeReference@1013871e +2025-10-29 10:29:44 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration materialized_nclob -> org.hibernate.type.BasicTypeReference@5a9051fd +2025-10-29 10:29:44 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration materialized_nclob_character_array -> org.hibernate.type.BasicTypeReference@7614378d +2025-10-29 10:29:44 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration materialized_nclob_char_array -> org.hibernate.type.BasicTypeReference@7028b5cc +2025-10-29 10:29:44 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration Duration -> org.hibernate.type.BasicTypeReference@7c0ff7a0 +2025-10-29 10:29:44 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.Duration -> org.hibernate.type.BasicTypeReference@7c0ff7a0 +2025-10-29 10:29:44 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration LocalDateTime -> org.hibernate.type.BasicTypeReference@24c84e65 +2025-10-29 10:29:44 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.LocalDateTime -> org.hibernate.type.BasicTypeReference@24c84e65 +2025-10-29 10:29:44 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration LocalDate -> org.hibernate.type.BasicTypeReference@7337bd2e +2025-10-29 10:29:44 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.LocalDate -> org.hibernate.type.BasicTypeReference@7337bd2e +2025-10-29 10:29:44 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration LocalTime -> org.hibernate.type.BasicTypeReference@4604e051 +2025-10-29 10:29:44 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.LocalTime -> org.hibernate.type.BasicTypeReference@4604e051 +2025-10-29 10:29:44 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration OffsetDateTime -> org.hibernate.type.BasicTypeReference@4535bdc6 +2025-10-29 10:29:44 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.OffsetDateTime -> org.hibernate.type.BasicTypeReference@4535bdc6 +2025-10-29 10:29:44 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration OffsetDateTimeWithTimezone -> org.hibernate.type.BasicTypeReference@23e86863 +2025-10-29 10:29:44 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration OffsetDateTimeWithoutTimezone -> org.hibernate.type.BasicTypeReference@6df87ffd +2025-10-29 10:29:44 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration OffsetTime -> org.hibernate.type.BasicTypeReference@c1f0c7b +2025-10-29 10:29:44 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.OffsetTime -> org.hibernate.type.BasicTypeReference@c1f0c7b +2025-10-29 10:29:44 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration OffsetTimeUtc -> org.hibernate.type.BasicTypeReference@642c5bb3 +2025-10-29 10:29:44 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration OffsetTimeWithTimezone -> org.hibernate.type.BasicTypeReference@4e79c25 +2025-10-29 10:29:44 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration OffsetTimeWithoutTimezone -> org.hibernate.type.BasicTypeReference@2ace1cd3 +2025-10-29 10:29:44 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration ZonedDateTime -> org.hibernate.type.BasicTypeReference@5e46a125 +2025-10-29 10:29:44 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.ZonedDateTime -> org.hibernate.type.BasicTypeReference@5e46a125 +2025-10-29 10:29:44 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration ZonedDateTimeWithTimezone -> org.hibernate.type.BasicTypeReference@5831989d +2025-10-29 10:29:44 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration ZonedDateTimeWithoutTimezone -> org.hibernate.type.BasicTypeReference@608f310a +2025-10-29 10:29:44 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration date -> org.hibernate.type.BasicTypeReference@3a7d914c +2025-10-29 10:29:44 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.sql.Date -> org.hibernate.type.BasicTypeReference@3a7d914c +2025-10-29 10:29:44 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration time -> org.hibernate.type.BasicTypeReference@515940af +2025-10-29 10:29:44 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.sql.Time -> org.hibernate.type.BasicTypeReference@515940af +2025-10-29 10:29:44 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration timestamp -> org.hibernate.type.BasicTypeReference@5f8df69 +2025-10-29 10:29:44 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.sql.Timestamp -> org.hibernate.type.BasicTypeReference@5f8df69 +2025-10-29 10:29:44 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.util.Date -> org.hibernate.type.BasicTypeReference@5f8df69 +2025-10-29 10:29:44 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration calendar -> org.hibernate.type.BasicTypeReference@1ce6a9bd +2025-10-29 10:29:44 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.util.Calendar -> org.hibernate.type.BasicTypeReference@1ce6a9bd +2025-10-29 10:29:44 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.util.GregorianCalendar -> org.hibernate.type.BasicTypeReference@1ce6a9bd +2025-10-29 10:29:44 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration calendar_date -> org.hibernate.type.BasicTypeReference@4a47bc9c +2025-10-29 10:29:44 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration calendar_time -> org.hibernate.type.BasicTypeReference@5100c143 +2025-10-29 10:29:44 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration instant -> org.hibernate.type.BasicTypeReference@12404f9d +2025-10-29 10:29:44 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.Instant -> org.hibernate.type.BasicTypeReference@12404f9d +2025-10-29 10:29:44 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration uuid -> org.hibernate.type.BasicTypeReference@3b42b729 +2025-10-29 10:29:44 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.util.UUID -> org.hibernate.type.BasicTypeReference@3b42b729 +2025-10-29 10:29:44 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration pg-uuid -> org.hibernate.type.BasicTypeReference@3b42b729 +2025-10-29 10:29:44 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration uuid-binary -> org.hibernate.type.BasicTypeReference@4c164f81 +2025-10-29 10:29:44 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration uuid-char -> org.hibernate.type.BasicTypeReference@1bcb8599 +2025-10-29 10:29:44 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration class -> org.hibernate.type.BasicTypeReference@b671dda +2025-10-29 10:29:44 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Class -> org.hibernate.type.BasicTypeReference@b671dda +2025-10-29 10:29:44 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration currency -> org.hibernate.type.BasicTypeReference@25b20860 +2025-10-29 10:29:44 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration Currency -> org.hibernate.type.BasicTypeReference@25b20860 +2025-10-29 10:29:44 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.util.Currency -> org.hibernate.type.BasicTypeReference@25b20860 +2025-10-29 10:29:44 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration locale -> org.hibernate.type.BasicTypeReference@5ba63110 +2025-10-29 10:29:44 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.util.Locale -> org.hibernate.type.BasicTypeReference@5ba63110 +2025-10-29 10:29:44 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration serializable -> org.hibernate.type.BasicTypeReference@1c0680b0 +2025-10-29 10:29:44 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.io.Serializable -> org.hibernate.type.BasicTypeReference@1c0680b0 +2025-10-29 10:29:44 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration timezone -> org.hibernate.type.BasicTypeReference@2f3cd727 +2025-10-29 10:29:44 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.util.TimeZone -> org.hibernate.type.BasicTypeReference@2f3cd727 +2025-10-29 10:29:44 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration ZoneOffset -> org.hibernate.type.BasicTypeReference@1af82ba8 +2025-10-29 10:29:44 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.ZoneOffset -> org.hibernate.type.BasicTypeReference@1af82ba8 +2025-10-29 10:29:44 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration url -> org.hibernate.type.BasicTypeReference@703cb756 +2025-10-29 10:29:44 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.net.URL -> org.hibernate.type.BasicTypeReference@703cb756 +2025-10-29 10:29:44 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration vector -> org.hibernate.type.BasicTypeReference@5897aae1 +2025-10-29 10:29:44 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration row_version -> org.hibernate.type.BasicTypeReference@11dbcb3b +2025-10-29 10:29:44 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration object -> org.hibernate.type.JavaObjectType@50734cea +2025-10-29 10:29:44 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Object -> org.hibernate.type.JavaObjectType@50734cea +2025-10-29 10:29:44 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration null -> org.hibernate.type.NullType@11069eac +2025-10-29 10:29:44 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration imm_date -> org.hibernate.type.BasicTypeReference@5909285b +2025-10-29 10:29:44 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration imm_time -> org.hibernate.type.BasicTypeReference@18ca9277 +2025-10-29 10:29:44 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration imm_timestamp -> org.hibernate.type.BasicTypeReference@3d9c8c3c +2025-10-29 10:29:44 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration imm_calendar -> org.hibernate.type.BasicTypeReference@2dc73024 +2025-10-29 10:29:44 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration imm_calendar_date -> org.hibernate.type.BasicTypeReference@42cd0fc6 +2025-10-29 10:29:44 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration imm_calendar_time -> org.hibernate.type.BasicTypeReference@e5864c2 +2025-10-29 10:29:44 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration imm_binary -> org.hibernate.type.BasicTypeReference@577cf459 +2025-10-29 10:29:44 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration imm_serializable -> org.hibernate.type.BasicTypeReference@432eb882 +2025-10-29 10:29:44 [main] INFO o.s.o.j.p.SpringPersistenceUnitInfo - No LoadTimeWeaver setup: ignoring JPA class transformer +2025-10-29 10:29:44 [main] INFO com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Starting... +2025-10-29 10:29:44 [main] INFO com.zaxxer.hikari.pool.HikariPool - HikariPool-1 - Added connection org.postgresql.jdbc.PgConnection@2682cccc +2025-10-29 10:29:44 [main] INFO com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Start completed. +2025-10-29 10:29:44 [main] WARN org.hibernate.orm.deprecation - HHH90000025: PostgreSQLDialect does not need to be specified explicitly using 'hibernate.dialect' (remove the property setting and it will be selected by default) +2025-10-29 10:29:44 [main] DEBUG o.h.t.d.sql.spi.DdlTypeRegistry - addDescriptor(2003, org.hibernate.type.descriptor.sql.internal.ArrayDdlTypeImpl@7187078a) replaced previous registration(org.hibernate.type.descriptor.sql.internal.ArrayDdlTypeImpl@6e612122) +2025-10-29 10:29:44 [main] DEBUG o.h.t.d.sql.spi.DdlTypeRegistry - addDescriptor(6, org.hibernate.type.descriptor.sql.internal.CapacityDependentDdlType@1d38cdde) replaced previous registration(org.hibernate.type.descriptor.sql.internal.DdlTypeImpl@3809f65d) +2025-10-29 10:29:44 [main] DEBUG o.h.t.d.jdbc.spi.JdbcTypeRegistry - addDescriptor(2004, BlobTypeDescriptor(BLOB_BINDING)) replaced previous registration(BlobTypeDescriptor(DEFAULT)) +2025-10-29 10:29:44 [main] DEBUG o.h.t.d.jdbc.spi.JdbcTypeRegistry - addDescriptor(2005, ClobTypeDescriptor(CLOB_BINDING)) replaced previous registration(ClobTypeDescriptor(DEFAULT)) +2025-10-29 10:29:44 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration JAVA_OBJECT -> org.hibernate.type.JavaObjectType@5f8da82 +2025-10-29 10:29:44 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Object -> org.hibernate.type.JavaObjectType@5f8da82 +2025-10-29 10:29:44 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Type registration key [java.lang.Object] overrode previous entry : `org.hibernate.type.JavaObjectType@50734cea` +2025-10-29 10:29:44 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration org.hibernate.type.DurationType -> basicType@1(java.time.Duration,3015) +2025-10-29 10:29:44 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration Duration -> basicType@1(java.time.Duration,3015) +2025-10-29 10:29:44 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.Duration -> basicType@1(java.time.Duration,3015) +2025-10-29 10:29:44 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration org.hibernate.type.OffsetDateTimeType -> basicType@2(java.time.OffsetDateTime,3003) +2025-10-29 10:29:44 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration OffsetDateTime -> basicType@2(java.time.OffsetDateTime,3003) +2025-10-29 10:29:44 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.OffsetDateTime -> basicType@2(java.time.OffsetDateTime,3003) +2025-10-29 10:29:44 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration org.hibernate.type.ZonedDateTimeType -> basicType@3(java.time.ZonedDateTime,3003) +2025-10-29 10:29:44 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration ZonedDateTime -> basicType@3(java.time.ZonedDateTime,3003) +2025-10-29 10:29:44 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.ZonedDateTime -> basicType@3(java.time.ZonedDateTime,3003) +2025-10-29 10:29:44 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration org.hibernate.type.OffsetTimeType -> basicType@4(java.time.OffsetTime,3007) +2025-10-29 10:29:44 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration OffsetTime -> basicType@4(java.time.OffsetTime,3007) +2025-10-29 10:29:44 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.OffsetTime -> basicType@4(java.time.OffsetTime,3007) +2025-10-29 10:29:44 [main] DEBUG o.h.type.spi.TypeConfiguration$Scope - Scoping TypeConfiguration [org.hibernate.type.spi.TypeConfiguration@4ac77269] to MetadataBuildingContext [org.hibernate.boot.internal.MetadataBuildingContextRootImpl@638d624a] +2025-10-29 10:29: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 10:29:44 [main] DEBUG o.h.type.spi.TypeConfiguration$Scope - Scoping TypeConfiguration [org.hibernate.type.spi.TypeConfiguration@4ac77269] to SessionFactoryImplementor [org.hibernate.internal.SessionFactoryImpl@ab11e76] +2025-10-29 10:29:44 [main] DEBUG org.hibernate.SQL - + alter table if exists transcript_segments + alter column text set data type TEXT +2025-10-29 10:29:44 [main] DEBUG org.hibernate.SQL - + alter table if exists transcriptions + alter column full_text set data type TEXT +2025-10-29 10:29:44 [main] TRACE o.h.type.spi.TypeConfiguration$Scope - Handling #sessionFactoryCreated from [org.hibernate.internal.SessionFactoryImpl@ab11e76] for TypeConfiguration +2025-10-29 10:29:44 [main] INFO o.s.o.j.LocalContainerEntityManagerFactoryBean - Initialized JPA EntityManagerFactory for persistence unit 'default' +2025-10-29 10:29: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 10:29:44 [main] INFO o.s.d.j.r.query.QueryEnhancerFactory - Hibernate is in classpath; If applicable, HQL parser will be used. +2025-10-29 10:29:45 [main] WARN c.u.h.stt.service.AzureSpeechService - Azure Speech Subscription Key 미설정 - 시뮬레이션 모드로 실행 +2025-10-29 10:29: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 10:29:45 [main] WARN o.s.b.a.s.s.UserDetailsServiceAutoConfiguration - + +Using generated security password: b48123df-60e5-4369-8c1e-e08f7535e966 + +This generated password is for development use only. Your security configuration must be updated before running your application in production. + +2025-10-29 10:29:45 [main] INFO o.s.s.c.a.a.c.InitializeUserDetailsBeanManagerConfigurer$InitializeUserDetailsManagerConfigurer - Global AuthenticationManager configured with UserDetailsService bean with name inMemoryUserDetailsManager +2025-10-29 10:29:45 [main] INFO o.s.b.a.e.web.EndpointLinksResolver - Exposing 3 endpoints beneath base path '/actuator' +2025-10-29 10:29:45 [main] INFO o.s.b.w.e.tomcat.TomcatWebServer - Tomcat started on port 8084 (http) with context path '/' +2025-10-29 10:29:45 [main] INFO c.unicorn.hgzero.stt.SttApplication - Started SttApplication in 2.668 seconds (process running for 2.801) +2025-10-29 10:29:55 [http-nio-8084-exec-1] INFO o.a.c.c.C.[Tomcat].[localhost].[/] - Initializing Spring DispatcherServlet 'dispatcherServlet' +2025-10-29 10:29:55 [http-nio-8084-exec-1] INFO o.s.web.servlet.DispatcherServlet - Initializing Servlet 'dispatcherServlet' +2025-10-29 10:29:55 [http-nio-8084-exec-1] INFO o.s.web.servlet.DispatcherServlet - Completed initialization in 1 ms +2025-10-29 10:29:55 [http-nio-8084-exec-1] INFO c.u.h.s.c.AudioWebSocketHandler - WebSocket 연결 성공 - sessionId: 62294256-279d-014b-f8a8-4dd5798f4c5e +2025-10-29 10:29:55 [http-nio-8084-exec-2] INFO c.u.h.s.c.AudioWebSocketHandler - 녹음 종료 - sessionId: 62294256-279d-014b-f8a8-4dd5798f4c5e, meetingId: null +2025-10-29 10:29:55 [http-nio-8084-exec-3] INFO c.u.h.s.c.AudioWebSocketHandler - WebSocket 연결 성공 - sessionId: 2a251fc2-6ae9-75d5-1e97-474469bed9c5 +2025-10-29 10:29:55 [http-nio-8084-exec-2] ERROR c.u.h.s.c.AudioWebSocketHandler - WebSocket 전송 오류 - sessionId: 62294256-279d-014b-f8a8-4dd5798f4c5e +java.io.IOException: java.io.IOException: Broken pipe + at org.apache.tomcat.websocket.WsRemoteEndpointImplBase.sendMessageBlockInternal(WsRemoteEndpointImplBase.java:326) + at org.apache.tomcat.websocket.WsRemoteEndpointImplBase.sendMessageBlock(WsRemoteEndpointImplBase.java:266) + at org.apache.tomcat.websocket.WsRemoteEndpointImplBase.sendMessageBlock(WsRemoteEndpointImplBase.java:257) + at org.apache.tomcat.websocket.WsSession.sendCloseMessage(WsSession.java:790) + at org.apache.tomcat.websocket.WsSession.onClose(WsSession.java:640) + at org.apache.tomcat.websocket.WsFrameBase.processDataControl(WsFrameBase.java:347) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:279) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: java.io.IOException: Broken pipe + at java.base/sun.nio.ch.SocketDispatcher.writev0(Native Method) + at java.base/sun.nio.ch.SocketDispatcher.writev(SocketDispatcher.java:66) + at java.base/sun.nio.ch.IOUtil.write(IOUtil.java:227) + at java.base/sun.nio.ch.IOUtil.write(IOUtil.java:158) + at java.base/sun.nio.ch.SocketChannelImpl.implWrite(SocketChannelImpl.java:597) + at java.base/sun.nio.ch.SocketChannelImpl.write(SocketChannelImpl.java:631) + at org.apache.tomcat.util.net.NioChannel.write(NioChannel.java:134) + at org.apache.tomcat.util.net.NioEndpoint$NioSocketWrapper$NioOperationState.run(NioEndpoint.java:1632) + at org.apache.tomcat.util.net.SocketWrapperBase$OperationState.start(SocketWrapperBase.java:1051) + at org.apache.tomcat.util.net.SocketWrapperBase.vectoredOperation(SocketWrapperBase.java:1440) + at org.apache.tomcat.util.net.SocketWrapperBase.write(SocketWrapperBase.java:1366) + at org.apache.tomcat.util.net.SocketWrapperBase.write(SocketWrapperBase.java:1337) + at org.apache.tomcat.websocket.server.WsRemoteEndpointImplServer.doWrite(WsRemoteEndpointImplServer.java:171) + at org.apache.tomcat.websocket.WsRemoteEndpointImplBase.writeMessagePart(WsRemoteEndpointImplBase.java:521) + at org.apache.tomcat.websocket.WsRemoteEndpointImplBase.sendMessageBlockInternal(WsRemoteEndpointImplBase.java:313) + ... 20 common frames omitted +2025-10-29 10:29:55 [http-nio-8084-exec-2] INFO c.u.h.s.c.AudioWebSocketHandler - WebSocket 연결 종료 - sessionId: 62294256-279d-014b-f8a8-4dd5798f4c5e, meetingId: null, status: CloseStatus[code=1000, reason=null] +2025-10-29 10:29:55 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:29:56 [scheduling-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 조회 완료 - meetingId: test-meeting-001, count: 19 +2025-10-29 10:29:56 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 오디오 청크 조회 완료 - meetingId: test-meeting-001, chunks: 19개 +2025-10-29 10:29:56 [scheduling-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 병합 완료 - chunks: 19, totalSize: 156484 +2025-10-29 10:29:56 [scheduling-1] WARN c.u.h.stt.service.AzureSpeechService - Azure Speech Service 비활성화 - 시뮬레이션 결과 반환 +2025-10-29 10:29:56 [scheduling-1] INFO c.u.h.stt.service.AzureSpeechService - [시뮬레이션] 음성 인식 결과: 마케팅 예산 배분 계획을 수립해야 합니다. +2025-10-29 10:29:56 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - Event Hub 이벤트 발행 완료 - meetingId: test-meeting-001, text: 마케팅 예산 배분 계획을 수립해야 합니다. +2025-10-29 10:29:56 [scheduling-1] DEBUG c.u.h.s.c.AudioWebSocketHandler - 전송할 세션 없음 - meetingId: test-meeting-001 +2025-10-29 10:29:56 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - WebSocket 결과 전송 완료 - meetingId: test-meeting-001, text: 마케팅 예산 배분 계획을 수립해야 합니다. +2025-10-29 10:29:56 [scheduling-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 삭제 완료 - meetingId: test-meeting-001 +2025-10-29 10:29:56 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 회의 처리 완료 - meetingId: test-meeting-001, text: 마케팅 예산 배분 계획을 수립해야 합니다. +2025-10-29 10:29:56 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:29:56 [ForkJoinPool.commonPool-worker-1] DEBUG c.u.h.s.e.p.EventHubPublisher - Event Hub 발행 시뮬레이션: +2025-10-29 10:29:56 [ForkJoinPool.commonPool-worker-1] DEBUG c.u.h.s.e.p.EventHubPublisher - Topic: transcription-events +2025-10-29 10:29:56 [ForkJoinPool.commonPool-worker-1] DEBUG c.u.h.s.e.p.EventHubPublisher - Event Data: {"eventId":"5b417c3b-3666-40bf-a6b2-520abe4c33eb","eventType":"SegmentCreated","segmentId":"501fecaf-5f34-4c85-9449-2f787adeb0c6","recordingId":"test-meeting-001","meetingId":"test-meeting-001","text":"마케팅 예산 배분 계획을 수립해야 합니다.","speakerId":"UNKNOWN","speakerName":"참석자","timestamp":[2025,10,29,10,29,56,43866000],"duration":5.0,"confidence":0.85,"warningFlag":false,"eventTime":[2025,10,29,10,29,56,44639000]} +2025-10-29 10:29:56 [ForkJoinPool.commonPool-worker-1] INFO c.u.h.s.e.p.EventHubPublisher - 이벤트 발행 완료 - topic: transcription-events, event: SegmentCreated +2025-10-29 10:29:56 [http-nio-8084-exec-4] INFO c.u.h.s.c.AudioWebSocketHandler - 녹음 종료 - sessionId: 2a251fc2-6ae9-75d5-1e97-474469bed9c5, meetingId: null +2025-10-29 10:29:56 [http-nio-8084-exec-4] INFO c.u.h.s.c.AudioWebSocketHandler - WebSocket 연결 종료 - sessionId: 2a251fc2-6ae9-75d5-1e97-474469bed9c5, meetingId: null, status: CloseStatus[code=1000, reason=null] +2025-10-29 10:29:56 [http-nio-8084-exec-5] INFO c.u.h.s.c.AudioWebSocketHandler - WebSocket 연결 성공 - sessionId: 941f71fe-171e-e618-24a8-7021fbe5421a +2025-10-29 10:29:56 [http-nio-8084-exec-6] INFO c.u.h.s.c.AudioWebSocketHandler - 녹음 종료 - sessionId: 941f71fe-171e-e618-24a8-7021fbe5421a, meetingId: null +2025-10-29 10:29:56 [http-nio-8084-exec-6] INFO c.u.h.s.c.AudioWebSocketHandler - WebSocket 연결 종료 - sessionId: 941f71fe-171e-e618-24a8-7021fbe5421a, meetingId: null, status: CloseStatus[code=1000, reason=null] +2025-10-29 10:29:56 [http-nio-8084-exec-7] INFO c.u.h.s.c.AudioWebSocketHandler - WebSocket 연결 성공 - sessionId: 854e499d-74e2-2307-d25a-a0c6b3d1ed59 +2025-10-29 10:30:01 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:30:01 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - 오디오 청크 없음 - meetingId: test-meeting-001 +2025-10-29 10:30:01 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:30:03 [http-nio-8084-exec-8] INFO c.u.h.s.c.AudioWebSocketHandler - 녹음 시작 - sessionId: 854e499d-74e2-2307-d25a-a0c6b3d1ed59, meetingId: test-meeting-001 +2025-10-29 10:30:03 [http-nio-8084-exec-9] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 0 +2025-10-29 10:30:03 [http-nio-8084-exec-9] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 0, size: 8236 bytes +2025-10-29 10:30:03 [http-nio-8084-exec-10] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 1 +2025-10-29 10:30:03 [http-nio-8084-exec-10] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 1, size: 8236 bytes +2025-10-29 10:30:03 [http-nio-8084-exec-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 2 +2025-10-29 10:30:03 [http-nio-8084-exec-1] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 2, size: 8236 bytes +2025-10-29 10:30:04 [http-nio-8084-exec-3] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 3 +2025-10-29 10:30:04 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 3, size: 8236 bytes +2025-10-29 10:30:04 [http-nio-8084-exec-2] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 4 +2025-10-29 10:30:04 [http-nio-8084-exec-2] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 4, size: 8236 bytes +2025-10-29 10:30:04 [http-nio-8084-exec-4] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 5 +2025-10-29 10:30:04 [http-nio-8084-exec-4] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 5, size: 8236 bytes +2025-10-29 10:30:04 [http-nio-8084-exec-5] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 6 +2025-10-29 10:30:04 [http-nio-8084-exec-5] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 6, size: 8236 bytes +2025-10-29 10:30:05 [http-nio-8084-exec-6] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 7 +2025-10-29 10:30:05 [http-nio-8084-exec-6] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 7, size: 8236 bytes +2025-10-29 10:30:05 [http-nio-8084-exec-7] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 8 +2025-10-29 10:30:05 [http-nio-8084-exec-7] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 8, size: 8236 bytes +2025-10-29 10:30:05 [http-nio-8084-exec-8] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 9 +2025-10-29 10:30:05 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 9, size: 8236 bytes +2025-10-29 10:30:05 [http-nio-8084-exec-9] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 10 +2025-10-29 10:30:05 [http-nio-8084-exec-9] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 10, size: 8236 bytes +2025-10-29 10:30:06 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:30:06 [scheduling-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 조회 완료 - meetingId: test-meeting-001, count: 11 +2025-10-29 10:30:06 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 오디오 청크 조회 완료 - meetingId: test-meeting-001, chunks: 11개 +2025-10-29 10:30:06 [scheduling-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 병합 완료 - chunks: 11, totalSize: 90596 +2025-10-29 10:30:06 [scheduling-1] WARN c.u.h.stt.service.AzureSpeechService - Azure Speech Service 비활성화 - 시뮬레이션 결과 반환 +2025-10-29 10:30:06 [scheduling-1] INFO c.u.h.stt.service.AzureSpeechService - [시뮬레이션] 음성 인식 결과: 다음 주까지 프로토타입을 완성하기로 했습니다. +2025-10-29 10:30:06 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - Event Hub 이벤트 발행 완료 - meetingId: test-meeting-001, text: 다음 주까지 프로토타입을 완성하기로 했습니다. +2025-10-29 10:30:06 [ForkJoinPool.commonPool-worker-1] DEBUG c.u.h.s.e.p.EventHubPublisher - Event Hub 발행 시뮬레이션: +2025-10-29 10:30:06 [ForkJoinPool.commonPool-worker-1] DEBUG c.u.h.s.e.p.EventHubPublisher - Topic: transcription-events +2025-10-29 10:30:06 [ForkJoinPool.commonPool-worker-1] DEBUG c.u.h.s.e.p.EventHubPublisher - Event Data: {"eventId":"dc64dcee-9f8d-4171-acf2-71c1a954a883","eventType":"SegmentCreated","segmentId":"f403ab01-1649-4cc0-a5fe-f0a41a81b4a9","recordingId":"test-meeting-001","meetingId":"test-meeting-001","text":"다음 주까지 프로토타입을 완성하기로 했습니다.","speakerId":"UNKNOWN","speakerName":"참석자","timestamp":[2025,10,29,10,30,6,195019000],"duration":5.0,"confidence":0.85,"warningFlag":false,"eventTime":[2025,10,29,10,30,6,195064000]} +2025-10-29 10:30:06 [ForkJoinPool.commonPool-worker-1] INFO c.u.h.s.e.p.EventHubPublisher - 이벤트 발행 완료 - topic: transcription-events, event: SegmentCreated +2025-10-29 10:30:06 [scheduling-1] INFO c.u.h.s.c.AudioWebSocketHandler - STT 결과 전송 완료 - meetingId: test-meeting-001, sessions: 1개, text: 다음 주까지 프로토타입을 완성하기로 했습니다. +2025-10-29 10:30:06 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - WebSocket 결과 전송 완료 - meetingId: test-meeting-001, text: 다음 주까지 프로토타입을 완성하기로 했습니다. +2025-10-29 10:30:06 [scheduling-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 삭제 완료 - meetingId: test-meeting-001 +2025-10-29 10:30:06 [http-nio-8084-exec-10] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 11 +2025-10-29 10:30:06 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 회의 처리 완료 - meetingId: test-meeting-001, text: 다음 주까지 프로토타입을 완성하기로 했습니다. +2025-10-29 10:30:06 [http-nio-8084-exec-10] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 11, size: 8236 bytes +2025-10-29 10:30:06 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:30:06 [http-nio-8084-exec-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 12 +2025-10-29 10:30:06 [http-nio-8084-exec-1] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 12, size: 8236 bytes +2025-10-29 10:30:06 [http-nio-8084-exec-3] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 13 +2025-10-29 10:30:06 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 13, size: 8236 bytes +2025-10-29 10:30:06 [http-nio-8084-exec-2] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 14 +2025-10-29 10:30:06 [http-nio-8084-exec-2] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 14, size: 8236 bytes +2025-10-29 10:30:07 [http-nio-8084-exec-4] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 15 +2025-10-29 10:30:07 [http-nio-8084-exec-4] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 15, size: 8236 bytes +2025-10-29 10:30:07 [http-nio-8084-exec-5] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 16 +2025-10-29 10:30:07 [http-nio-8084-exec-5] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 16, size: 8236 bytes +2025-10-29 10:30:07 [http-nio-8084-exec-6] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 17 +2025-10-29 10:30:07 [http-nio-8084-exec-6] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 17, size: 8236 bytes +2025-10-29 10:30:07 [http-nio-8084-exec-7] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 18 +2025-10-29 10:30:07 [http-nio-8084-exec-7] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 18, size: 8236 bytes +2025-10-29 10:30:08 [http-nio-8084-exec-8] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 19 +2025-10-29 10:30:08 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 19, size: 8236 bytes +2025-10-29 10:30:08 [http-nio-8084-exec-9] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 20 +2025-10-29 10:30:08 [http-nio-8084-exec-9] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 20, size: 8236 bytes +2025-10-29 10:30:08 [http-nio-8084-exec-10] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 21 +2025-10-29 10:30:08 [http-nio-8084-exec-10] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 21, size: 8236 bytes +2025-10-29 10:30:09 [http-nio-8084-exec-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 22 +2025-10-29 10:30:09 [http-nio-8084-exec-1] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 22, size: 8236 bytes +2025-10-29 10:30:09 [http-nio-8084-exec-3] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 23 +2025-10-29 10:30:09 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 23, size: 8236 bytes +2025-10-29 10:30:09 [http-nio-8084-exec-2] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 24 +2025-10-29 10:30:09 [http-nio-8084-exec-2] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 24, size: 8236 bytes +2025-10-29 10:30:09 [http-nio-8084-exec-4] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 25 +2025-10-29 10:30:09 [http-nio-8084-exec-4] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 25, size: 8236 bytes +2025-10-29 10:30:10 [http-nio-8084-exec-5] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 26 +2025-10-29 10:30:10 [http-nio-8084-exec-5] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 26, size: 8236 bytes +2025-10-29 10:30:10 [http-nio-8084-exec-6] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 27 +2025-10-29 10:30:10 [http-nio-8084-exec-6] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 27, size: 8236 bytes +2025-10-29 10:30:10 [http-nio-8084-exec-7] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 28 +2025-10-29 10:30:10 [http-nio-8084-exec-7] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 28, size: 8236 bytes +2025-10-29 10:30:10 [http-nio-8084-exec-8] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 29 +2025-10-29 10:30:10 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 29, size: 8236 bytes +2025-10-29 10:30:11 [http-nio-8084-exec-9] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 30 +2025-10-29 10:30:11 [http-nio-8084-exec-9] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 30, size: 8236 bytes +2025-10-29 10:30:11 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:30:11 [scheduling-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 조회 완료 - meetingId: test-meeting-001, count: 19 +2025-10-29 10:30:11 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 오디오 청크 조회 완료 - meetingId: test-meeting-001, chunks: 19개 +2025-10-29 10:30:11 [scheduling-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 병합 완료 - chunks: 19, totalSize: 156484 +2025-10-29 10:30:11 [scheduling-1] WARN c.u.h.stt.service.AzureSpeechService - Azure Speech Service 비활성화 - 시뮬레이션 결과 반환 +2025-10-29 10:30:11 [scheduling-1] INFO c.u.h.stt.service.AzureSpeechService - [시뮬레이션] 음성 인식 결과: 프로젝트 일정 조정이 필요할 것 같습니다. +2025-10-29 10:30:11 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - Event Hub 이벤트 발행 완료 - meetingId: test-meeting-001, text: 프로젝트 일정 조정이 필요할 것 같습니다. +2025-10-29 10:30:11 [ForkJoinPool.commonPool-worker-1] DEBUG c.u.h.s.e.p.EventHubPublisher - Event Hub 발행 시뮬레이션: +2025-10-29 10:30:11 [ForkJoinPool.commonPool-worker-1] DEBUG c.u.h.s.e.p.EventHubPublisher - Topic: transcription-events +2025-10-29 10:30:11 [ForkJoinPool.commonPool-worker-1] DEBUG c.u.h.s.e.p.EventHubPublisher - Event Data: {"eventId":"ed2b2de0-e988-4a1d-acec-46c5ff01a5ac","eventType":"SegmentCreated","segmentId":"c0309704-152b-4e1b-bed9-b78d63f0799c","recordingId":"test-meeting-001","meetingId":"test-meeting-001","text":"프로젝트 일정 조정이 필요할 것 같습니다.","speakerId":"UNKNOWN","speakerName":"참석자","timestamp":[2025,10,29,10,30,11,291580000],"duration":5.0,"confidence":0.85,"warningFlag":false,"eventTime":[2025,10,29,10,30,11,291595000]} +2025-10-29 10:30:11 [ForkJoinPool.commonPool-worker-1] INFO c.u.h.s.e.p.EventHubPublisher - 이벤트 발행 완료 - topic: transcription-events, event: SegmentCreated +2025-10-29 10:30:11 [scheduling-1] INFO c.u.h.s.c.AudioWebSocketHandler - STT 결과 전송 완료 - meetingId: test-meeting-001, sessions: 1개, text: 프로젝트 일정 조정이 필요할 것 같습니다. +2025-10-29 10:30:11 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - WebSocket 결과 전송 완료 - meetingId: test-meeting-001, text: 프로젝트 일정 조정이 필요할 것 같습니다. +2025-10-29 10:30:11 [scheduling-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 삭제 완료 - meetingId: test-meeting-001 +2025-10-29 10:30:11 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 회의 처리 완료 - meetingId: test-meeting-001, text: 프로젝트 일정 조정이 필요할 것 같습니다. +2025-10-29 10:30:11 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:30:11 [http-nio-8084-exec-10] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 31 +2025-10-29 10:30:11 [http-nio-8084-exec-10] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 31, size: 8236 bytes +2025-10-29 10:30:11 [http-nio-8084-exec-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 32 +2025-10-29 10:30:11 [http-nio-8084-exec-1] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 32, size: 8236 bytes +2025-10-29 10:30:11 [http-nio-8084-exec-3] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 33 +2025-10-29 10:30:11 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 33, size: 8236 bytes +2025-10-29 10:30:12 [http-nio-8084-exec-2] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 34 +2025-10-29 10:30:12 [http-nio-8084-exec-2] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 34, size: 8236 bytes +2025-10-29 10:30:12 [http-nio-8084-exec-4] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 35 +2025-10-29 10:30:12 [http-nio-8084-exec-4] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 35, size: 8236 bytes +2025-10-29 10:30:12 [http-nio-8084-exec-5] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 36 +2025-10-29 10:30:12 [http-nio-8084-exec-5] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 36, size: 8236 bytes +2025-10-29 10:30:12 [http-nio-8084-exec-6] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 37 +2025-10-29 10:30:12 [http-nio-8084-exec-6] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 37, size: 8236 bytes +2025-10-29 10:30:13 [http-nio-8084-exec-7] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 38 +2025-10-29 10:30:13 [http-nio-8084-exec-7] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 38, size: 8236 bytes +2025-10-29 10:30:13 [http-nio-8084-exec-8] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 39 +2025-10-29 10:30:13 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 39, size: 8236 bytes +2025-10-29 10:30:13 [http-nio-8084-exec-9] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 40 +2025-10-29 10:30:13 [http-nio-8084-exec-9] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 40, size: 8236 bytes +2025-10-29 10:30:13 [http-nio-8084-exec-10] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 41 +2025-10-29 10:30:13 [http-nio-8084-exec-10] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 41, size: 8236 bytes +2025-10-29 10:30:14 [http-nio-8084-exec-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 42 +2025-10-29 10:30:14 [http-nio-8084-exec-1] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 42, size: 8236 bytes +2025-10-29 10:30:14 [http-nio-8084-exec-3] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 43 +2025-10-29 10:30:14 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 43, size: 8236 bytes +2025-10-29 10:30:14 [http-nio-8084-exec-2] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 44 +2025-10-29 10:30:14 [http-nio-8084-exec-2] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 44, size: 8236 bytes +2025-10-29 10:30:14 [http-nio-8084-exec-4] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 45 +2025-10-29 10:30:14 [http-nio-8084-exec-4] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 45, size: 8236 bytes +2025-10-29 10:30:15 [http-nio-8084-exec-5] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 46 +2025-10-29 10:30:15 [http-nio-8084-exec-5] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 46, size: 8236 bytes +2025-10-29 10:30:15 [http-nio-8084-exec-6] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 47 +2025-10-29 10:30:15 [http-nio-8084-exec-6] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 47, size: 8236 bytes +2025-10-29 10:30:15 [http-nio-8084-exec-7] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 48 +2025-10-29 10:30:15 [http-nio-8084-exec-7] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 48, size: 8236 bytes +2025-10-29 10:30:15 [http-nio-8084-exec-8] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 49 +2025-10-29 10:30:15 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 49, size: 8236 bytes +2025-10-29 10:30:16 [http-nio-8084-exec-9] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 50 +2025-10-29 10:30:16 [http-nio-8084-exec-9] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 50, size: 8236 bytes +2025-10-29 10:30:16 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:30:16 [scheduling-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 조회 완료 - meetingId: test-meeting-001, count: 19 +2025-10-29 10:30:16 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 오디오 청크 조회 완료 - meetingId: test-meeting-001, chunks: 19개 +2025-10-29 10:30:16 [scheduling-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 병합 완료 - chunks: 19, totalSize: 156484 +2025-10-29 10:30:16 [scheduling-1] WARN c.u.h.stt.service.AzureSpeechService - Azure Speech Service 비활성화 - 시뮬레이션 결과 반환 +2025-10-29 10:30:16 [scheduling-1] INFO c.u.h.stt.service.AzureSpeechService - [시뮬레이션] 음성 인식 결과: 기술 스택 선정에 대한 의견을 나누고 있습니다. +2025-10-29 10:30:16 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - Event Hub 이벤트 발행 완료 - meetingId: test-meeting-001, text: 기술 스택 선정에 대한 의견을 나누고 있습니다. +2025-10-29 10:30:16 [ForkJoinPool.commonPool-worker-1] DEBUG c.u.h.s.e.p.EventHubPublisher - Event Hub 발행 시뮬레이션: +2025-10-29 10:30:16 [ForkJoinPool.commonPool-worker-1] DEBUG c.u.h.s.e.p.EventHubPublisher - Topic: transcription-events +2025-10-29 10:30:16 [ForkJoinPool.commonPool-worker-1] DEBUG c.u.h.s.e.p.EventHubPublisher - Event Data: {"eventId":"b1910987-38fc-4aa4-8a8c-05d65825de4e","eventType":"SegmentCreated","segmentId":"be55de6c-6ca6-492f-9cba-4885f66b5606","recordingId":"test-meeting-001","meetingId":"test-meeting-001","text":"기술 스택 선정에 대한 의견을 나누고 있습니다.","speakerId":"UNKNOWN","speakerName":"참석자","timestamp":[2025,10,29,10,30,16,386287000],"duration":5.0,"confidence":0.85,"warningFlag":false,"eventTime":[2025,10,29,10,30,16,386316000]} +2025-10-29 10:30:16 [ForkJoinPool.commonPool-worker-1] INFO c.u.h.s.e.p.EventHubPublisher - 이벤트 발행 완료 - topic: transcription-events, event: SegmentCreated +2025-10-29 10:30:16 [scheduling-1] INFO c.u.h.s.c.AudioWebSocketHandler - STT 결과 전송 완료 - meetingId: test-meeting-001, sessions: 1개, text: 기술 스택 선정에 대한 의견을 나누고 있습니다. +2025-10-29 10:30:16 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - WebSocket 결과 전송 완료 - meetingId: test-meeting-001, text: 기술 스택 선정에 대한 의견을 나누고 있습니다. +2025-10-29 10:30:16 [scheduling-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 삭제 완료 - meetingId: test-meeting-001 +2025-10-29 10:30:16 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 회의 처리 완료 - meetingId: test-meeting-001, text: 기술 스택 선정에 대한 의견을 나누고 있습니다. +2025-10-29 10:30:16 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:30:16 [http-nio-8084-exec-10] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 51 +2025-10-29 10:30:16 [http-nio-8084-exec-10] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 51, size: 8236 bytes +2025-10-29 10:30:16 [http-nio-8084-exec-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 52 +2025-10-29 10:30:16 [http-nio-8084-exec-1] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 52, size: 8236 bytes +2025-10-29 10:30:16 [http-nio-8084-exec-3] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 53 +2025-10-29 10:30:16 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 53, size: 8236 bytes +2025-10-29 10:30:17 [http-nio-8084-exec-2] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 54 +2025-10-29 10:30:17 [http-nio-8084-exec-2] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 54, size: 8236 bytes +2025-10-29 10:30:17 [http-nio-8084-exec-4] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 55 +2025-10-29 10:30:17 [http-nio-8084-exec-4] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 55, size: 8236 bytes +2025-10-29 10:30:17 [http-nio-8084-exec-5] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 56 +2025-10-29 10:30:17 [http-nio-8084-exec-5] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 56, size: 8236 bytes +2025-10-29 10:30:17 [http-nio-8084-exec-6] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 57 +2025-10-29 10:30:17 [http-nio-8084-exec-6] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 57, size: 8236 bytes +2025-10-29 10:30:18 [http-nio-8084-exec-7] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 58 +2025-10-29 10:30:18 [http-nio-8084-exec-7] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 58, size: 8236 bytes +2025-10-29 10:30:18 [http-nio-8084-exec-8] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 59 +2025-10-29 10:30:18 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 59, size: 8236 bytes +2025-10-29 10:30:18 [http-nio-8084-exec-9] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 60 +2025-10-29 10:30:18 [http-nio-8084-exec-9] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 60, size: 8236 bytes +2025-10-29 10:30:19 [http-nio-8084-exec-10] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 61 +2025-10-29 10:30:19 [http-nio-8084-exec-10] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 61, size: 8236 bytes +2025-10-29 10:30:19 [http-nio-8084-exec-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 62 +2025-10-29 10:30:19 [http-nio-8084-exec-1] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 62, size: 8236 bytes +2025-10-29 10:30:19 [http-nio-8084-exec-3] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 63 +2025-10-29 10:30:19 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 63, size: 8236 bytes +2025-10-29 10:30:19 [http-nio-8084-exec-2] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 64 +2025-10-29 10:30:19 [http-nio-8084-exec-2] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 64, size: 8236 bytes +2025-10-29 10:30:20 [http-nio-8084-exec-4] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 65 +2025-10-29 10:30:20 [http-nio-8084-exec-4] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 65, size: 8236 bytes +2025-10-29 10:30:20 [http-nio-8084-exec-5] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 66 +2025-10-29 10:30:20 [http-nio-8084-exec-5] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 66, size: 8236 bytes +2025-10-29 10:30:20 [http-nio-8084-exec-6] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 67 +2025-10-29 10:30:20 [http-nio-8084-exec-6] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 67, size: 8236 bytes +2025-10-29 10:30:20 [http-nio-8084-exec-7] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 68 +2025-10-29 10:30:20 [http-nio-8084-exec-7] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 68, size: 8236 bytes +2025-10-29 10:30:21 [http-nio-8084-exec-8] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 69 +2025-10-29 10:30:21 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 69, size: 8236 bytes +2025-10-29 10:30:21 [http-nio-8084-exec-9] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 70 +2025-10-29 10:30:21 [http-nio-8084-exec-9] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 70, size: 8236 bytes +2025-10-29 10:30:21 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:30:21 [scheduling-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 조회 완료 - meetingId: test-meeting-001, count: 20 +2025-10-29 10:30:21 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 오디오 청크 조회 완료 - meetingId: test-meeting-001, chunks: 20개 +2025-10-29 10:30:21 [scheduling-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 병합 완료 - chunks: 20, totalSize: 164720 +2025-10-29 10:30:21 [scheduling-1] WARN c.u.h.stt.service.AzureSpeechService - Azure Speech Service 비활성화 - 시뮬레이션 결과 반환 +2025-10-29 10:30:21 [scheduling-1] INFO c.u.h.stt.service.AzureSpeechService - [시뮬레이션] 음성 인식 결과: 신제품 개발 일정에 대해 논의하고 있습니다. +2025-10-29 10:30:21 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - Event Hub 이벤트 발행 완료 - meetingId: test-meeting-001, text: 신제품 개발 일정에 대해 논의하고 있습니다. +2025-10-29 10:30:21 [ForkJoinPool.commonPool-worker-1] DEBUG c.u.h.s.e.p.EventHubPublisher - Event Hub 발행 시뮬레이션: +2025-10-29 10:30:21 [ForkJoinPool.commonPool-worker-1] DEBUG c.u.h.s.e.p.EventHubPublisher - Topic: transcription-events +2025-10-29 10:30:21 [ForkJoinPool.commonPool-worker-1] DEBUG c.u.h.s.e.p.EventHubPublisher - Event Data: {"eventId":"2232c133-9ce3-45aa-b869-e98e46597041","eventType":"SegmentCreated","segmentId":"2a1ad990-eb7b-4eef-9c58-bcf2f9ebb4c0","recordingId":"test-meeting-001","meetingId":"test-meeting-001","text":"신제품 개발 일정에 대해 논의하고 있습니다.","speakerId":"UNKNOWN","speakerName":"참석자","timestamp":[2025,10,29,10,30,21,470306000],"duration":5.0,"confidence":0.85,"warningFlag":false,"eventTime":[2025,10,29,10,30,21,470335000]} +2025-10-29 10:30:21 [ForkJoinPool.commonPool-worker-1] INFO c.u.h.s.e.p.EventHubPublisher - 이벤트 발행 완료 - topic: transcription-events, event: SegmentCreated +2025-10-29 10:30:21 [scheduling-1] INFO c.u.h.s.c.AudioWebSocketHandler - STT 결과 전송 완료 - meetingId: test-meeting-001, sessions: 1개, text: 신제품 개발 일정에 대해 논의하고 있습니다. +2025-10-29 10:30:21 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - WebSocket 결과 전송 완료 - meetingId: test-meeting-001, text: 신제품 개발 일정에 대해 논의하고 있습니다. +2025-10-29 10:30:21 [scheduling-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 삭제 완료 - meetingId: test-meeting-001 +2025-10-29 10:30:21 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 회의 처리 완료 - meetingId: test-meeting-001, text: 신제품 개발 일정에 대해 논의하고 있습니다. +2025-10-29 10:30:21 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:30:21 [http-nio-8084-exec-10] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 71 +2025-10-29 10:30:21 [http-nio-8084-exec-10] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 71, size: 8236 bytes +2025-10-29 10:30:21 [http-nio-8084-exec-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 72 +2025-10-29 10:30:21 [http-nio-8084-exec-1] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 72, size: 8236 bytes +2025-10-29 10:30:22 [http-nio-8084-exec-3] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 73 +2025-10-29 10:30:22 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 73, size: 8236 bytes +2025-10-29 10:30:22 [http-nio-8084-exec-2] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 74 +2025-10-29 10:30:22 [http-nio-8084-exec-2] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 74, size: 8236 bytes +2025-10-29 10:30:22 [http-nio-8084-exec-4] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 75 +2025-10-29 10:30:22 [http-nio-8084-exec-4] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 75, size: 8236 bytes +2025-10-29 10:30:22 [http-nio-8084-exec-5] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 76 +2025-10-29 10:30:22 [http-nio-8084-exec-5] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 76, size: 8236 bytes +2025-10-29 10:30:23 [http-nio-8084-exec-6] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 77 +2025-10-29 10:30:23 [http-nio-8084-exec-6] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 77, size: 8236 bytes +2025-10-29 10:30:23 [http-nio-8084-exec-7] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 78 +2025-10-29 10:30:23 [http-nio-8084-exec-7] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 78, size: 8236 bytes +2025-10-29 10:30:23 [http-nio-8084-exec-8] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 79 +2025-10-29 10:30:23 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 79, size: 8236 bytes +2025-10-29 10:30:23 [http-nio-8084-exec-9] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 80 +2025-10-29 10:30:23 [http-nio-8084-exec-9] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 80, size: 8236 bytes +2025-10-29 10:30:24 [http-nio-8084-exec-10] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 81 +2025-10-29 10:30:24 [http-nio-8084-exec-10] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 81, size: 8236 bytes +2025-10-29 10:30:24 [http-nio-8084-exec-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 82 +2025-10-29 10:30:24 [http-nio-8084-exec-1] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 82, size: 8236 bytes +2025-10-29 10:30:24 [http-nio-8084-exec-3] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 83 +2025-10-29 10:30:24 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 83, size: 8236 bytes +2025-10-29 10:30:24 [http-nio-8084-exec-2] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 84 +2025-10-29 10:30:24 [http-nio-8084-exec-2] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 84, size: 8236 bytes +2025-10-29 10:30:25 [http-nio-8084-exec-4] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 85 +2025-10-29 10:30:25 [http-nio-8084-exec-4] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 85, size: 8236 bytes +2025-10-29 10:30:25 [http-nio-8084-exec-5] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 86 +2025-10-29 10:30:25 [http-nio-8084-exec-5] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 86, size: 8236 bytes +2025-10-29 10:30:25 [http-nio-8084-exec-6] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 87 +2025-10-29 10:30:25 [http-nio-8084-exec-6] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 87, size: 8236 bytes +2025-10-29 10:30:25 [http-nio-8084-exec-7] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 88 +2025-10-29 10:30:25 [http-nio-8084-exec-7] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 88, size: 8236 bytes +2025-10-29 10:30:26 [http-nio-8084-exec-8] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 89 +2025-10-29 10:30:26 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 89, size: 8236 bytes +2025-10-29 10:30:26 [http-nio-8084-exec-9] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 90 +2025-10-29 10:30:26 [http-nio-8084-exec-9] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 90, size: 8236 bytes +2025-10-29 10:30:26 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:30:26 [scheduling-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 조회 완료 - meetingId: test-meeting-001, count: 20 +2025-10-29 10:30:26 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 오디오 청크 조회 완료 - meetingId: test-meeting-001, chunks: 20개 +2025-10-29 10:30:26 [scheduling-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 병합 완료 - chunks: 20, totalSize: 164720 +2025-10-29 10:30:26 [scheduling-1] WARN c.u.h.stt.service.AzureSpeechService - Azure Speech Service 비활성화 - 시뮬레이션 결과 반환 +2025-10-29 10:30:26 [scheduling-1] INFO c.u.h.stt.service.AzureSpeechService - [시뮬레이션] 음성 인식 결과: 프로젝트 일정 조정이 필요할 것 같습니다. +2025-10-29 10:30:26 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - Event Hub 이벤트 발행 완료 - meetingId: test-meeting-001, text: 프로젝트 일정 조정이 필요할 것 같습니다. +2025-10-29 10:30:26 [ForkJoinPool.commonPool-worker-1] DEBUG c.u.h.s.e.p.EventHubPublisher - Event Hub 발행 시뮬레이션: +2025-10-29 10:30:26 [ForkJoinPool.commonPool-worker-1] DEBUG c.u.h.s.e.p.EventHubPublisher - Topic: transcription-events +2025-10-29 10:30:26 [ForkJoinPool.commonPool-worker-1] DEBUG c.u.h.s.e.p.EventHubPublisher - Event Data: {"eventId":"0b474784-08e9-4b1a-94d6-e3c2e5dd9a11","eventType":"SegmentCreated","segmentId":"c3112a11-f771-4030-8785-54f07fba2885","recordingId":"test-meeting-001","meetingId":"test-meeting-001","text":"프로젝트 일정 조정이 필요할 것 같습니다.","speakerId":"UNKNOWN","speakerName":"참석자","timestamp":[2025,10,29,10,30,26,612640000],"duration":5.0,"confidence":0.85,"warningFlag":false,"eventTime":[2025,10,29,10,30,26,612676000]} +2025-10-29 10:30:26 [ForkJoinPool.commonPool-worker-1] INFO c.u.h.s.e.p.EventHubPublisher - 이벤트 발행 완료 - topic: transcription-events, event: SegmentCreated +2025-10-29 10:30:26 [scheduling-1] INFO c.u.h.s.c.AudioWebSocketHandler - STT 결과 전송 완료 - meetingId: test-meeting-001, sessions: 1개, text: 프로젝트 일정 조정이 필요할 것 같습니다. +2025-10-29 10:30:26 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - WebSocket 결과 전송 완료 - meetingId: test-meeting-001, text: 프로젝트 일정 조정이 필요할 것 같습니다. +2025-10-29 10:30:26 [scheduling-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 삭제 완료 - meetingId: test-meeting-001 +2025-10-29 10:30:26 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 회의 처리 완료 - meetingId: test-meeting-001, text: 프로젝트 일정 조정이 필요할 것 같습니다. +2025-10-29 10:30:26 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:30:26 [http-nio-8084-exec-10] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 91 +2025-10-29 10:30:26 [http-nio-8084-exec-10] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 91, size: 8236 bytes +2025-10-29 10:30:26 [http-nio-8084-exec-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 92 +2025-10-29 10:30:26 [http-nio-8084-exec-1] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 92, size: 8236 bytes +2025-10-29 10:30:27 [http-nio-8084-exec-3] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 93 +2025-10-29 10:30:27 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 93, size: 8236 bytes +2025-10-29 10:30:27 [http-nio-8084-exec-2] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 94 +2025-10-29 10:30:27 [http-nio-8084-exec-2] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 94, size: 8236 bytes +2025-10-29 10:30:27 [http-nio-8084-exec-4] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 95 +2025-10-29 10:30:27 [http-nio-8084-exec-4] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 95, size: 8236 bytes +2025-10-29 10:30:27 [http-nio-8084-exec-5] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 96 +2025-10-29 10:30:27 [http-nio-8084-exec-5] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 96, size: 8236 bytes +2025-10-29 10:30:28 [http-nio-8084-exec-6] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 97 +2025-10-29 10:30:28 [http-nio-8084-exec-6] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 97, size: 8236 bytes +2025-10-29 10:30:28 [http-nio-8084-exec-7] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 98 +2025-10-29 10:30:28 [http-nio-8084-exec-7] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 98, size: 8236 bytes +2025-10-29 10:30:28 [http-nio-8084-exec-8] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 99 +2025-10-29 10:30:28 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 99, size: 8236 bytes +2025-10-29 10:30:28 [http-nio-8084-exec-9] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 100 +2025-10-29 10:30:28 [http-nio-8084-exec-9] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 100, size: 8236 bytes +2025-10-29 10:30:29 [http-nio-8084-exec-10] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 101 +2025-10-29 10:30:29 [http-nio-8084-exec-10] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 101, size: 8236 bytes +2025-10-29 10:30:29 [http-nio-8084-exec-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 102 +2025-10-29 10:30:29 [http-nio-8084-exec-1] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 102, size: 8236 bytes +2025-10-29 10:30:29 [http-nio-8084-exec-3] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 103 +2025-10-29 10:30:29 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 103, size: 8236 bytes +2025-10-29 10:30:30 [http-nio-8084-exec-2] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 104 +2025-10-29 10:30:30 [http-nio-8084-exec-2] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 104, size: 8236 bytes +2025-10-29 10:30:30 [http-nio-8084-exec-4] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 105 +2025-10-29 10:30:30 [http-nio-8084-exec-4] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 105, size: 8236 bytes +2025-10-29 10:30:30 [http-nio-8084-exec-5] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 106 +2025-10-29 10:30:30 [http-nio-8084-exec-5] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 106, size: 8236 bytes +2025-10-29 10:30:30 [http-nio-8084-exec-6] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 107 +2025-10-29 10:30:30 [http-nio-8084-exec-6] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 107, size: 8236 bytes +2025-10-29 10:30:31 [http-nio-8084-exec-7] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 108 +2025-10-29 10:30:31 [http-nio-8084-exec-7] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 108, size: 8236 bytes +2025-10-29 10:30:31 [http-nio-8084-exec-8] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 109 +2025-10-29 10:30:31 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 109, size: 8236 bytes +2025-10-29 10:30:31 [http-nio-8084-exec-9] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 110 +2025-10-29 10:30:31 [http-nio-8084-exec-9] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 110, size: 8236 bytes +2025-10-29 10:30:31 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:30:31 [scheduling-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 조회 완료 - meetingId: test-meeting-001, count: 20 +2025-10-29 10:30:31 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 오디오 청크 조회 완료 - meetingId: test-meeting-001, chunks: 20개 +2025-10-29 10:30:31 [scheduling-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 병합 완료 - chunks: 20, totalSize: 164720 +2025-10-29 10:30:31 [scheduling-1] WARN c.u.h.stt.service.AzureSpeechService - Azure Speech Service 비활성화 - 시뮬레이션 결과 반환 +2025-10-29 10:30:31 [scheduling-1] INFO c.u.h.stt.service.AzureSpeechService - [시뮬레이션] 음성 인식 결과: 마케팅 예산 배분 계획을 수립해야 합니다. +2025-10-29 10:30:31 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - Event Hub 이벤트 발행 완료 - meetingId: test-meeting-001, text: 마케팅 예산 배분 계획을 수립해야 합니다. +2025-10-29 10:30:31 [ForkJoinPool.commonPool-worker-1] DEBUG c.u.h.s.e.p.EventHubPublisher - Event Hub 발행 시뮬레이션: +2025-10-29 10:30:31 [ForkJoinPool.commonPool-worker-1] DEBUG c.u.h.s.e.p.EventHubPublisher - Topic: transcription-events +2025-10-29 10:30:31 [ForkJoinPool.commonPool-worker-1] DEBUG c.u.h.s.e.p.EventHubPublisher - Event Data: {"eventId":"78439c08-83b0-487c-922b-ad248e9e0ebc","eventType":"SegmentCreated","segmentId":"738120be-f367-40e2-929b-49beec6bead5","recordingId":"test-meeting-001","meetingId":"test-meeting-001","text":"마케팅 예산 배분 계획을 수립해야 합니다.","speakerId":"UNKNOWN","speakerName":"참석자","timestamp":[2025,10,29,10,30,31,749307000],"duration":5.0,"confidence":0.85,"warningFlag":false,"eventTime":[2025,10,29,10,30,31,749336000]} +2025-10-29 10:30:31 [ForkJoinPool.commonPool-worker-1] INFO c.u.h.s.e.p.EventHubPublisher - 이벤트 발행 완료 - topic: transcription-events, event: SegmentCreated +2025-10-29 10:30:31 [scheduling-1] INFO c.u.h.s.c.AudioWebSocketHandler - STT 결과 전송 완료 - meetingId: test-meeting-001, sessions: 1개, text: 마케팅 예산 배분 계획을 수립해야 합니다. +2025-10-29 10:30:31 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - WebSocket 결과 전송 완료 - meetingId: test-meeting-001, text: 마케팅 예산 배분 계획을 수립해야 합니다. +2025-10-29 10:30:31 [scheduling-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 삭제 완료 - meetingId: test-meeting-001 +2025-10-29 10:30:31 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 회의 처리 완료 - meetingId: test-meeting-001, text: 마케팅 예산 배분 계획을 수립해야 합니다. +2025-10-29 10:30:31 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:30:31 [http-nio-8084-exec-10] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 111 +2025-10-29 10:30:31 [http-nio-8084-exec-10] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 111, size: 8236 bytes +2025-10-29 10:30:32 [http-nio-8084-exec-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 112 +2025-10-29 10:30:32 [http-nio-8084-exec-1] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 112, size: 8236 bytes +2025-10-29 10:30:32 [http-nio-8084-exec-3] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 113 +2025-10-29 10:30:32 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 113, size: 8236 bytes +2025-10-29 10:30:32 [http-nio-8084-exec-2] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 114 +2025-10-29 10:30:32 [http-nio-8084-exec-2] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 114, size: 8236 bytes +2025-10-29 10:30:32 [http-nio-8084-exec-4] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 115 +2025-10-29 10:30:32 [http-nio-8084-exec-4] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 115, size: 8236 bytes +2025-10-29 10:30:33 [http-nio-8084-exec-5] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 116 +2025-10-29 10:30:33 [http-nio-8084-exec-5] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 116, size: 8236 bytes +2025-10-29 10:30:33 [http-nio-8084-exec-6] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 117 +2025-10-29 10:30:33 [http-nio-8084-exec-6] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 117, size: 8236 bytes +2025-10-29 10:30:33 [http-nio-8084-exec-7] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 118 +2025-10-29 10:30:33 [http-nio-8084-exec-7] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 118, size: 8236 bytes +2025-10-29 10:30:33 [http-nio-8084-exec-8] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 119 +2025-10-29 10:30:33 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 119, size: 8236 bytes +2025-10-29 10:30:34 [http-nio-8084-exec-9] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 120 +2025-10-29 10:30:34 [http-nio-8084-exec-9] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 120, size: 8236 bytes +2025-10-29 10:30:34 [http-nio-8084-exec-10] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 121 +2025-10-29 10:30:34 [http-nio-8084-exec-10] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 121, size: 8236 bytes +2025-10-29 10:30:34 [http-nio-8084-exec-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 122 +2025-10-29 10:30:34 [http-nio-8084-exec-1] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 122, size: 8236 bytes +2025-10-29 10:30:34 [http-nio-8084-exec-3] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 123 +2025-10-29 10:30:34 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 123, size: 8236 bytes +2025-10-29 10:30:35 [http-nio-8084-exec-2] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 124 +2025-10-29 10:30:35 [http-nio-8084-exec-2] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 124, size: 8236 bytes +2025-10-29 10:30:35 [http-nio-8084-exec-4] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 125 +2025-10-29 10:30:35 [http-nio-8084-exec-4] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 125, size: 8236 bytes +2025-10-29 10:30:35 [http-nio-8084-exec-5] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 126 +2025-10-29 10:30:35 [http-nio-8084-exec-5] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 126, size: 8236 bytes +2025-10-29 10:30:35 [http-nio-8084-exec-6] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 127 +2025-10-29 10:30:35 [http-nio-8084-exec-6] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 127, size: 8236 bytes +2025-10-29 10:30:36 [http-nio-8084-exec-7] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 128 +2025-10-29 10:30:36 [http-nio-8084-exec-7] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 128, size: 8236 bytes +2025-10-29 10:30:36 [http-nio-8084-exec-8] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 129 +2025-10-29 10:30:36 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 129, size: 8236 bytes +2025-10-29 10:30:36 [http-nio-8084-exec-9] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 130 +2025-10-29 10:30:36 [http-nio-8084-exec-9] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 130, size: 8236 bytes +2025-10-29 10:30:36 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:30:36 [scheduling-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 조회 완료 - meetingId: test-meeting-001, count: 20 +2025-10-29 10:30:36 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 오디오 청크 조회 완료 - meetingId: test-meeting-001, chunks: 20개 +2025-10-29 10:30:36 [scheduling-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 병합 완료 - chunks: 20, totalSize: 164720 +2025-10-29 10:30:36 [scheduling-1] WARN c.u.h.stt.service.AzureSpeechService - Azure Speech Service 비활성화 - 시뮬레이션 결과 반환 +2025-10-29 10:30:36 [scheduling-1] INFO c.u.h.stt.service.AzureSpeechService - [시뮬레이션] 음성 인식 결과: 신제품 개발 일정에 대해 논의하고 있습니다. +2025-10-29 10:30:36 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - Event Hub 이벤트 발행 완료 - meetingId: test-meeting-001, text: 신제품 개발 일정에 대해 논의하고 있습니다. +2025-10-29 10:30:36 [ForkJoinPool.commonPool-worker-1] DEBUG c.u.h.s.e.p.EventHubPublisher - Event Hub 발행 시뮬레이션: +2025-10-29 10:30:36 [ForkJoinPool.commonPool-worker-1] DEBUG c.u.h.s.e.p.EventHubPublisher - Topic: transcription-events +2025-10-29 10:30:36 [ForkJoinPool.commonPool-worker-1] DEBUG c.u.h.s.e.p.EventHubPublisher - Event Data: {"eventId":"3fca5528-f050-4eab-87ad-5ec02e7d9f82","eventType":"SegmentCreated","segmentId":"f63e1aa3-64d3-4208-a4fc-8d05623537c7","recordingId":"test-meeting-001","meetingId":"test-meeting-001","text":"신제품 개발 일정에 대해 논의하고 있습니다.","speakerId":"UNKNOWN","speakerName":"참석자","timestamp":[2025,10,29,10,30,36,881559000],"duration":5.0,"confidence":0.85,"warningFlag":false,"eventTime":[2025,10,29,10,30,36,881573000]} +2025-10-29 10:30:36 [ForkJoinPool.commonPool-worker-1] INFO c.u.h.s.e.p.EventHubPublisher - 이벤트 발행 완료 - topic: transcription-events, event: SegmentCreated +2025-10-29 10:30:36 [scheduling-1] INFO c.u.h.s.c.AudioWebSocketHandler - STT 결과 전송 완료 - meetingId: test-meeting-001, sessions: 1개, text: 신제품 개발 일정에 대해 논의하고 있습니다. +2025-10-29 10:30:36 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - WebSocket 결과 전송 완료 - meetingId: test-meeting-001, text: 신제품 개발 일정에 대해 논의하고 있습니다. +2025-10-29 10:30:36 [scheduling-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 삭제 완료 - meetingId: test-meeting-001 +2025-10-29 10:30:36 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 회의 처리 완료 - meetingId: test-meeting-001, text: 신제품 개발 일정에 대해 논의하고 있습니다. +2025-10-29 10:30:36 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:30:36 [http-nio-8084-exec-10] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 131 +2025-10-29 10:30:36 [http-nio-8084-exec-10] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 131, size: 8236 bytes +2025-10-29 10:30:37 [http-nio-8084-exec-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 132 +2025-10-29 10:30:37 [http-nio-8084-exec-1] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 132, size: 8236 bytes +2025-10-29 10:30:37 [http-nio-8084-exec-3] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 133 +2025-10-29 10:30:37 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 133, size: 8236 bytes +2025-10-29 10:30:37 [http-nio-8084-exec-2] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 134 +2025-10-29 10:30:37 [http-nio-8084-exec-2] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 134, size: 8236 bytes +2025-10-29 10:30:37 [http-nio-8084-exec-4] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 135 +2025-10-29 10:30:37 [http-nio-8084-exec-4] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 135, size: 8236 bytes +2025-10-29 10:30:38 [http-nio-8084-exec-5] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 136 +2025-10-29 10:30:38 [http-nio-8084-exec-5] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 136, size: 8236 bytes +2025-10-29 10:30:38 [http-nio-8084-exec-6] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 137 +2025-10-29 10:30:38 [http-nio-8084-exec-6] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 137, size: 8236 bytes +2025-10-29 10:30:38 [http-nio-8084-exec-7] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 138 +2025-10-29 10:30:38 [http-nio-8084-exec-7] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 138, size: 8236 bytes +2025-10-29 10:30:38 [http-nio-8084-exec-8] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 139 +2025-10-29 10:30:38 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 139, size: 8236 bytes +2025-10-29 10:30:39 [http-nio-8084-exec-9] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 140 +2025-10-29 10:30:39 [http-nio-8084-exec-9] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 140, size: 8236 bytes +2025-10-29 10:30:39 [http-nio-8084-exec-10] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 141 +2025-10-29 10:30:39 [http-nio-8084-exec-10] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 141, size: 8236 bytes +2025-10-29 10:30:39 [http-nio-8084-exec-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 142 +2025-10-29 10:30:39 [http-nio-8084-exec-1] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 142, size: 8236 bytes +2025-10-29 10:30:39 [http-nio-8084-exec-3] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 143 +2025-10-29 10:30:39 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 143, size: 8236 bytes +2025-10-29 10:30:40 [http-nio-8084-exec-2] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 144 +2025-10-29 10:30:40 [http-nio-8084-exec-2] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 144, size: 8236 bytes +2025-10-29 10:30:40 [http-nio-8084-exec-4] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 145 +2025-10-29 10:30:40 [http-nio-8084-exec-4] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 145, size: 8236 bytes +2025-10-29 10:30:40 [http-nio-8084-exec-5] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 146 +2025-10-29 10:30:40 [http-nio-8084-exec-5] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 146, size: 8236 bytes +2025-10-29 10:30:41 [http-nio-8084-exec-6] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 147 +2025-10-29 10:30:41 [http-nio-8084-exec-6] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 147, size: 8236 bytes +2025-10-29 10:30:41 [http-nio-8084-exec-7] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 148 +2025-10-29 10:30:41 [http-nio-8084-exec-7] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 148, size: 8236 bytes +2025-10-29 10:30:41 [http-nio-8084-exec-8] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 149 +2025-10-29 10:30:41 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 149, size: 8236 bytes +2025-10-29 10:30:41 [http-nio-8084-exec-9] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 150 +2025-10-29 10:30:41 [http-nio-8084-exec-9] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 150, size: 8236 bytes +2025-10-29 10:30:41 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:30:41 [scheduling-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 조회 완료 - meetingId: test-meeting-001, count: 19 +2025-10-29 10:30:41 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 오디오 청크 조회 완료 - meetingId: test-meeting-001, chunks: 19개 +2025-10-29 10:30:41 [scheduling-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 병합 완료 - chunks: 19, totalSize: 156484 +2025-10-29 10:30:41 [scheduling-1] WARN c.u.h.stt.service.AzureSpeechService - Azure Speech Service 비활성화 - 시뮬레이션 결과 반환 +2025-10-29 10:30:41 [scheduling-1] INFO c.u.h.stt.service.AzureSpeechService - [시뮬레이션] 음성 인식 결과: 신제품 개발 일정에 대해 논의하고 있습니다. +2025-10-29 10:30:41 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - Event Hub 이벤트 발행 완료 - meetingId: test-meeting-001, text: 신제품 개발 일정에 대해 논의하고 있습니다. +2025-10-29 10:30:41 [ForkJoinPool.commonPool-worker-1] DEBUG c.u.h.s.e.p.EventHubPublisher - Event Hub 발행 시뮬레이션: +2025-10-29 10:30:41 [ForkJoinPool.commonPool-worker-1] DEBUG c.u.h.s.e.p.EventHubPublisher - Topic: transcription-events +2025-10-29 10:30:41 [ForkJoinPool.commonPool-worker-1] DEBUG c.u.h.s.e.p.EventHubPublisher - Event Data: {"eventId":"678f9449-67f6-4fbc-8d35-2c8357c8b499","eventType":"SegmentCreated","segmentId":"80f61ae3-fb46-4258-b203-64dbf6319c40","recordingId":"test-meeting-001","meetingId":"test-meeting-001","text":"신제품 개발 일정에 대해 논의하고 있습니다.","speakerId":"UNKNOWN","speakerName":"참석자","timestamp":[2025,10,29,10,30,41,974341000],"duration":5.0,"confidence":0.85,"warningFlag":false,"eventTime":[2025,10,29,10,30,41,974375000]} +2025-10-29 10:30:41 [ForkJoinPool.commonPool-worker-1] INFO c.u.h.s.e.p.EventHubPublisher - 이벤트 발행 완료 - topic: transcription-events, event: SegmentCreated +2025-10-29 10:30:41 [scheduling-1] INFO c.u.h.s.c.AudioWebSocketHandler - STT 결과 전송 완료 - meetingId: test-meeting-001, sessions: 1개, text: 신제품 개발 일정에 대해 논의하고 있습니다. +2025-10-29 10:30:41 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - WebSocket 결과 전송 완료 - meetingId: test-meeting-001, text: 신제품 개발 일정에 대해 논의하고 있습니다. +2025-10-29 10:30:41 [scheduling-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 삭제 완료 - meetingId: test-meeting-001 +2025-10-29 10:30:41 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 회의 처리 완료 - meetingId: test-meeting-001, text: 신제품 개발 일정에 대해 논의하고 있습니다. +2025-10-29 10:30:41 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:30:42 [http-nio-8084-exec-10] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 151 +2025-10-29 10:30:42 [http-nio-8084-exec-10] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 151, size: 8236 bytes +2025-10-29 10:30:42 [http-nio-8084-exec-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 152 +2025-10-29 10:30:42 [http-nio-8084-exec-1] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 152, size: 8236 bytes +2025-10-29 10:30:42 [http-nio-8084-exec-3] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 153 +2025-10-29 10:30:42 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 153, size: 8236 bytes +2025-10-29 10:30:42 [http-nio-8084-exec-2] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 154 +2025-10-29 10:30:42 [http-nio-8084-exec-2] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 154, size: 8236 bytes +2025-10-29 10:30:43 [http-nio-8084-exec-4] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 155 +2025-10-29 10:30:43 [http-nio-8084-exec-4] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 155, size: 8236 bytes +2025-10-29 10:30:43 [http-nio-8084-exec-5] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 156 +2025-10-29 10:30:43 [http-nio-8084-exec-5] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 156, size: 8236 bytes +2025-10-29 10:30:43 [http-nio-8084-exec-6] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 157 +2025-10-29 10:30:43 [http-nio-8084-exec-6] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 157, size: 8236 bytes +2025-10-29 10:30:43 [http-nio-8084-exec-7] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 158 +2025-10-29 10:30:43 [http-nio-8084-exec-7] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 158, size: 8236 bytes +2025-10-29 10:30:44 [http-nio-8084-exec-8] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 159 +2025-10-29 10:30:44 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 159, size: 8236 bytes +2025-10-29 10:30:44 [http-nio-8084-exec-9] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 160 +2025-10-29 10:30:44 [http-nio-8084-exec-9] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 160, size: 8236 bytes +2025-10-29 10:30:44 [http-nio-8084-exec-10] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 161 +2025-10-29 10:30:44 [http-nio-8084-exec-10] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 161, size: 8236 bytes +2025-10-29 10:30:44 [http-nio-8084-exec-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 162 +2025-10-29 10:30:44 [http-nio-8084-exec-1] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 162, size: 8236 bytes +2025-10-29 10:30:45 [http-nio-8084-exec-3] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 163 +2025-10-29 10:30:45 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 163, size: 8236 bytes +2025-10-29 10:30:45 [http-nio-8084-exec-2] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 164 +2025-10-29 10:30:45 [http-nio-8084-exec-2] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 164, size: 8236 bytes +2025-10-29 10:30:45 [http-nio-8084-exec-4] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 165 +2025-10-29 10:30:45 [http-nio-8084-exec-4] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 165, size: 8236 bytes +2025-10-29 10:30:45 [http-nio-8084-exec-5] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 166 +2025-10-29 10:30:45 [http-nio-8084-exec-5] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 166, size: 8236 bytes +2025-10-29 10:30:46 [http-nio-8084-exec-6] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 167 +2025-10-29 10:30:46 [http-nio-8084-exec-6] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 167, size: 8236 bytes +2025-10-29 10:30:46 [http-nio-8084-exec-7] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 168 +2025-10-29 10:30:46 [http-nio-8084-exec-7] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 168, size: 8236 bytes +2025-10-29 10:30:46 [http-nio-8084-exec-8] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 169 +2025-10-29 10:30:46 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 169, size: 8236 bytes +2025-10-29 10:30:46 [http-nio-8084-exec-9] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 170 +2025-10-29 10:30:46 [http-nio-8084-exec-9] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 170, size: 8236 bytes +2025-10-29 10:30:47 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:30:47 [scheduling-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 조회 완료 - meetingId: test-meeting-001, count: 20 +2025-10-29 10:30:47 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 오디오 청크 조회 완료 - meetingId: test-meeting-001, chunks: 20개 +2025-10-29 10:30:47 [scheduling-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 병합 완료 - chunks: 20, totalSize: 164720 +2025-10-29 10:30:47 [scheduling-1] WARN c.u.h.stt.service.AzureSpeechService - Azure Speech Service 비활성화 - 시뮬레이션 결과 반환 +2025-10-29 10:30:47 [scheduling-1] INFO c.u.h.stt.service.AzureSpeechService - [시뮬레이션] 음성 인식 결과: 기술 스택 선정에 대한 의견을 나누고 있습니다. +2025-10-29 10:30:47 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - Event Hub 이벤트 발행 완료 - meetingId: test-meeting-001, text: 기술 스택 선정에 대한 의견을 나누고 있습니다. +2025-10-29 10:30:47 [ForkJoinPool.commonPool-worker-1] DEBUG c.u.h.s.e.p.EventHubPublisher - Event Hub 발행 시뮬레이션: +2025-10-29 10:30:47 [ForkJoinPool.commonPool-worker-1] DEBUG c.u.h.s.e.p.EventHubPublisher - Topic: transcription-events +2025-10-29 10:30:47 [ForkJoinPool.commonPool-worker-1] DEBUG c.u.h.s.e.p.EventHubPublisher - Event Data: {"eventId":"60a004b3-7b22-46b9-85e6-42bc94ab9156","eventType":"SegmentCreated","segmentId":"81c2fef6-f602-4b24-80cc-dfabf988d1ff","recordingId":"test-meeting-001","meetingId":"test-meeting-001","text":"기술 스택 선정에 대한 의견을 나누고 있습니다.","speakerId":"UNKNOWN","speakerName":"참석자","timestamp":[2025,10,29,10,30,47,181426000],"duration":5.0,"confidence":0.85,"warningFlag":false,"eventTime":[2025,10,29,10,30,47,181460000]} +2025-10-29 10:30:47 [ForkJoinPool.commonPool-worker-1] INFO c.u.h.s.e.p.EventHubPublisher - 이벤트 발행 완료 - topic: transcription-events, event: SegmentCreated +2025-10-29 10:30:47 [scheduling-1] INFO c.u.h.s.c.AudioWebSocketHandler - STT 결과 전송 완료 - meetingId: test-meeting-001, sessions: 1개, text: 기술 스택 선정에 대한 의견을 나누고 있습니다. +2025-10-29 10:30:47 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - WebSocket 결과 전송 완료 - meetingId: test-meeting-001, text: 기술 스택 선정에 대한 의견을 나누고 있습니다. +2025-10-29 10:30:47 [scheduling-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 삭제 완료 - meetingId: test-meeting-001 +2025-10-29 10:30:47 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 회의 처리 완료 - meetingId: test-meeting-001, text: 기술 스택 선정에 대한 의견을 나누고 있습니다. +2025-10-29 10:30:47 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:30:47 [http-nio-8084-exec-10] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 171 +2025-10-29 10:30:47 [http-nio-8084-exec-10] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 171, size: 8236 bytes +2025-10-29 10:30:47 [http-nio-8084-exec-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 172 +2025-10-29 10:30:47 [http-nio-8084-exec-1] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 172, size: 8236 bytes +2025-10-29 10:30:47 [http-nio-8084-exec-3] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 173 +2025-10-29 10:30:47 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 173, size: 8236 bytes +2025-10-29 10:30:47 [http-nio-8084-exec-2] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 174 +2025-10-29 10:30:47 [http-nio-8084-exec-2] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 174, size: 8236 bytes +2025-10-29 10:30:48 [http-nio-8084-exec-4] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 175 +2025-10-29 10:30:48 [http-nio-8084-exec-4] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 175, size: 8236 bytes +2025-10-29 10:30:48 [http-nio-8084-exec-5] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 176 +2025-10-29 10:30:48 [http-nio-8084-exec-5] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 176, size: 8236 bytes +2025-10-29 10:30:48 [http-nio-8084-exec-6] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 177 +2025-10-29 10:30:48 [http-nio-8084-exec-6] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 177, size: 8236 bytes +2025-10-29 10:30:48 [http-nio-8084-exec-7] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 178 +2025-10-29 10:30:48 [http-nio-8084-exec-7] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 178, size: 8236 bytes +2025-10-29 10:30:49 [http-nio-8084-exec-8] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 179 +2025-10-29 10:30:49 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 179, size: 8236 bytes +2025-10-29 10:30:49 [http-nio-8084-exec-9] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 180 +2025-10-29 10:30:49 [http-nio-8084-exec-9] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 180, size: 8236 bytes +2025-10-29 10:30:49 [http-nio-8084-exec-10] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 181 +2025-10-29 10:30:49 [http-nio-8084-exec-10] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 181, size: 8236 bytes +2025-10-29 10:30:49 [http-nio-8084-exec-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 182 +2025-10-29 10:30:49 [http-nio-8084-exec-1] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 182, size: 8236 bytes +2025-10-29 10:30:50 [http-nio-8084-exec-3] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 183 +2025-10-29 10:30:50 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 183, size: 8236 bytes +2025-10-29 10:30:50 [http-nio-8084-exec-2] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 184 +2025-10-29 10:30:50 [http-nio-8084-exec-2] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 184, size: 8236 bytes +2025-10-29 10:30:50 [http-nio-8084-exec-4] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 185 +2025-10-29 10:30:50 [http-nio-8084-exec-4] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 185, size: 8236 bytes +2025-10-29 10:30:50 [http-nio-8084-exec-5] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 186 +2025-10-29 10:30:50 [http-nio-8084-exec-5] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 186, size: 8236 bytes +2025-10-29 10:30:51 [http-nio-8084-exec-6] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 187 +2025-10-29 10:30:51 [http-nio-8084-exec-6] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 187, size: 8236 bytes +2025-10-29 10:30:51 [http-nio-8084-exec-7] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 188 +2025-10-29 10:30:51 [http-nio-8084-exec-7] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 188, size: 8236 bytes +2025-10-29 10:30:51 [http-nio-8084-exec-8] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 189 +2025-10-29 10:30:51 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 189, size: 8236 bytes +2025-10-29 10:30:52 [http-nio-8084-exec-9] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 190 +2025-10-29 10:30:52 [http-nio-8084-exec-9] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 190, size: 8236 bytes +2025-10-29 10:30:52 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:30:52 [scheduling-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 조회 완료 - meetingId: test-meeting-001, count: 19 +2025-10-29 10:30:52 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 오디오 청크 조회 완료 - meetingId: test-meeting-001, chunks: 19개 +2025-10-29 10:30:52 [scheduling-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 병합 완료 - chunks: 19, totalSize: 156484 +2025-10-29 10:30:52 [scheduling-1] WARN c.u.h.stt.service.AzureSpeechService - Azure Speech Service 비활성화 - 시뮬레이션 결과 반환 +2025-10-29 10:30:52 [scheduling-1] INFO c.u.h.stt.service.AzureSpeechService - [시뮬레이션] 음성 인식 결과: 신제품 개발 일정에 대해 논의하고 있습니다. +2025-10-29 10:30:52 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - Event Hub 이벤트 발행 완료 - meetingId: test-meeting-001, text: 신제품 개발 일정에 대해 논의하고 있습니다. +2025-10-29 10:30:52 [ForkJoinPool.commonPool-worker-1] DEBUG c.u.h.s.e.p.EventHubPublisher - Event Hub 발행 시뮬레이션: +2025-10-29 10:30:52 [ForkJoinPool.commonPool-worker-1] DEBUG c.u.h.s.e.p.EventHubPublisher - Topic: transcription-events +2025-10-29 10:30:52 [ForkJoinPool.commonPool-worker-1] DEBUG c.u.h.s.e.p.EventHubPublisher - Event Data: {"eventId":"9966b0a8-8af8-4cb1-9638-5aba4d029e4a","eventType":"SegmentCreated","segmentId":"1567da3b-676f-45ad-8ab8-d3480cc721fd","recordingId":"test-meeting-001","meetingId":"test-meeting-001","text":"신제품 개발 일정에 대해 논의하고 있습니다.","speakerId":"UNKNOWN","speakerName":"참석자","timestamp":[2025,10,29,10,30,52,300167000],"duration":5.0,"confidence":0.85,"warningFlag":false,"eventTime":[2025,10,29,10,30,52,300206000]} +2025-10-29 10:30:52 [ForkJoinPool.commonPool-worker-1] INFO c.u.h.s.e.p.EventHubPublisher - 이벤트 발행 완료 - topic: transcription-events, event: SegmentCreated +2025-10-29 10:30:52 [scheduling-1] INFO c.u.h.s.c.AudioWebSocketHandler - STT 결과 전송 완료 - meetingId: test-meeting-001, sessions: 1개, text: 신제품 개발 일정에 대해 논의하고 있습니다. +2025-10-29 10:30:52 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - WebSocket 결과 전송 완료 - meetingId: test-meeting-001, text: 신제품 개발 일정에 대해 논의하고 있습니다. +2025-10-29 10:30:52 [scheduling-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 삭제 완료 - meetingId: test-meeting-001 +2025-10-29 10:30:52 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 회의 처리 완료 - meetingId: test-meeting-001, text: 신제품 개발 일정에 대해 논의하고 있습니다. +2025-10-29 10:30:52 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:30:52 [http-nio-8084-exec-10] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 191 +2025-10-29 10:30:52 [http-nio-8084-exec-10] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 191, size: 8236 bytes +2025-10-29 10:30:52 [http-nio-8084-exec-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 192 +2025-10-29 10:30:52 [http-nio-8084-exec-1] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 192, size: 8236 bytes +2025-10-29 10:30:52 [http-nio-8084-exec-3] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 193 +2025-10-29 10:30:52 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 193, size: 8236 bytes +2025-10-29 10:30:53 [http-nio-8084-exec-2] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 194 +2025-10-29 10:30:53 [http-nio-8084-exec-2] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 194, size: 8236 bytes +2025-10-29 10:30:53 [http-nio-8084-exec-4] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 195 +2025-10-29 10:30:53 [http-nio-8084-exec-4] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 195, size: 8236 bytes +2025-10-29 10:30:53 [http-nio-8084-exec-5] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 196 +2025-10-29 10:30:53 [http-nio-8084-exec-5] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 196, size: 8236 bytes +2025-10-29 10:30:53 [http-nio-8084-exec-6] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 197 +2025-10-29 10:30:53 [http-nio-8084-exec-6] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 197, size: 8236 bytes +2025-10-29 10:30:54 [http-nio-8084-exec-7] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 198 +2025-10-29 10:30:54 [http-nio-8084-exec-7] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 198, size: 8236 bytes +2025-10-29 10:30:54 [http-nio-8084-exec-8] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 199 +2025-10-29 10:30:54 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 199, size: 8236 bytes +2025-10-29 10:30:54 [http-nio-8084-exec-9] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 200 +2025-10-29 10:30:54 [http-nio-8084-exec-9] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 200, size: 8236 bytes +2025-10-29 10:30:54 [http-nio-8084-exec-10] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 201 +2025-10-29 10:30:54 [http-nio-8084-exec-10] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 201, size: 8236 bytes +2025-10-29 10:30:55 [http-nio-8084-exec-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 202 +2025-10-29 10:30:55 [http-nio-8084-exec-1] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 202, size: 8236 bytes +2025-10-29 10:30:55 [http-nio-8084-exec-3] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 203 +2025-10-29 10:30:55 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 203, size: 8236 bytes +2025-10-29 10:30:55 [http-nio-8084-exec-2] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 204 +2025-10-29 10:30:55 [http-nio-8084-exec-2] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 204, size: 8236 bytes +2025-10-29 10:30:55 [http-nio-8084-exec-4] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 205 +2025-10-29 10:30:55 [http-nio-8084-exec-4] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 205, size: 8236 bytes +2025-10-29 10:30:56 [http-nio-8084-exec-5] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 206 +2025-10-29 10:30:56 [http-nio-8084-exec-5] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 206, size: 8236 bytes +2025-10-29 10:30:56 [http-nio-8084-exec-6] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 207 +2025-10-29 10:30:56 [http-nio-8084-exec-6] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 207, size: 8236 bytes +2025-10-29 10:30:56 [http-nio-8084-exec-7] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 208 +2025-10-29 10:30:56 [http-nio-8084-exec-7] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 208, size: 8236 bytes +2025-10-29 10:30:56 [http-nio-8084-exec-8] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 209 +2025-10-29 10:30:56 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 209, size: 8236 bytes +2025-10-29 10:30:57 [http-nio-8084-exec-9] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 210 +2025-10-29 10:30:57 [http-nio-8084-exec-9] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 210, size: 8236 bytes +2025-10-29 10:30:57 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:30:57 [scheduling-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 조회 완료 - meetingId: test-meeting-001, count: 19 +2025-10-29 10:30:57 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 오디오 청크 조회 완료 - meetingId: test-meeting-001, chunks: 19개 +2025-10-29 10:30:57 [scheduling-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 병합 완료 - chunks: 19, totalSize: 156484 +2025-10-29 10:30:57 [scheduling-1] WARN c.u.h.stt.service.AzureSpeechService - Azure Speech Service 비활성화 - 시뮬레이션 결과 반환 +2025-10-29 10:30:57 [scheduling-1] INFO c.u.h.stt.service.AzureSpeechService - [시뮬레이션] 음성 인식 결과: 기술 스택 선정에 대한 의견을 나누고 있습니다. +2025-10-29 10:30:57 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - Event Hub 이벤트 발행 완료 - meetingId: test-meeting-001, text: 기술 스택 선정에 대한 의견을 나누고 있습니다. +2025-10-29 10:30:57 [ForkJoinPool.commonPool-worker-1] DEBUG c.u.h.s.e.p.EventHubPublisher - Event Hub 발행 시뮬레이션: +2025-10-29 10:30:57 [ForkJoinPool.commonPool-worker-1] DEBUG c.u.h.s.e.p.EventHubPublisher - Topic: transcription-events +2025-10-29 10:30:57 [ForkJoinPool.commonPool-worker-1] DEBUG c.u.h.s.e.p.EventHubPublisher - Event Data: {"eventId":"5f6839c9-0665-4a02-bc79-05e984e1ddb6","eventType":"SegmentCreated","segmentId":"49723e11-111d-4a1e-975a-41d5ef754815","recordingId":"test-meeting-001","meetingId":"test-meeting-001","text":"기술 스택 선정에 대한 의견을 나누고 있습니다.","speakerId":"UNKNOWN","speakerName":"참석자","timestamp":[2025,10,29,10,30,57,415010000],"duration":5.0,"confidence":0.85,"warningFlag":false,"eventTime":[2025,10,29,10,30,57,415026000]} +2025-10-29 10:30:57 [ForkJoinPool.commonPool-worker-1] INFO c.u.h.s.e.p.EventHubPublisher - 이벤트 발행 완료 - topic: transcription-events, event: SegmentCreated +2025-10-29 10:30:57 [scheduling-1] INFO c.u.h.s.c.AudioWebSocketHandler - STT 결과 전송 완료 - meetingId: test-meeting-001, sessions: 1개, text: 기술 스택 선정에 대한 의견을 나누고 있습니다. +2025-10-29 10:30:57 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - WebSocket 결과 전송 완료 - meetingId: test-meeting-001, text: 기술 스택 선정에 대한 의견을 나누고 있습니다. +2025-10-29 10:30:57 [scheduling-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 삭제 완료 - meetingId: test-meeting-001 +2025-10-29 10:30:57 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 회의 처리 완료 - meetingId: test-meeting-001, text: 기술 스택 선정에 대한 의견을 나누고 있습니다. +2025-10-29 10:30:57 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:30:57 [http-nio-8084-exec-10] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 211 +2025-10-29 10:30:57 [http-nio-8084-exec-10] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 211, size: 8236 bytes +2025-10-29 10:30:57 [http-nio-8084-exec-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 212 +2025-10-29 10:30:57 [http-nio-8084-exec-1] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 212, size: 8236 bytes +2025-10-29 10:30:57 [http-nio-8084-exec-3] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 213 +2025-10-29 10:30:57 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 213, size: 8236 bytes +2025-10-29 10:30:58 [http-nio-8084-exec-2] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 214 +2025-10-29 10:30:58 [http-nio-8084-exec-2] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 214, size: 8236 bytes +2025-10-29 10:30:58 [http-nio-8084-exec-4] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 215 +2025-10-29 10:30:58 [http-nio-8084-exec-4] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 215, size: 8236 bytes +2025-10-29 10:30:58 [http-nio-8084-exec-5] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 216 +2025-10-29 10:30:58 [http-nio-8084-exec-5] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 216, size: 8236 bytes +2025-10-29 10:30:58 [http-nio-8084-exec-6] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 217 +2025-10-29 10:30:58 [http-nio-8084-exec-6] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 217, size: 8236 bytes +2025-10-29 10:30:59 [http-nio-8084-exec-7] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 218 +2025-10-29 10:30:59 [http-nio-8084-exec-7] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 218, size: 8236 bytes +2025-10-29 10:30:59 [http-nio-8084-exec-8] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 219 +2025-10-29 10:30:59 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 219, size: 8236 bytes +2025-10-29 10:30:59 [http-nio-8084-exec-9] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 220 +2025-10-29 10:30:59 [http-nio-8084-exec-9] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 220, size: 8236 bytes +2025-10-29 10:30:59 [http-nio-8084-exec-10] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 221 +2025-10-29 10:30:59 [http-nio-8084-exec-10] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 221, size: 8236 bytes +2025-10-29 10:31:00 [http-nio-8084-exec-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 222 +2025-10-29 10:31:00 [http-nio-8084-exec-1] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 222, size: 8236 bytes +2025-10-29 10:31:00 [http-nio-8084-exec-3] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 223 +2025-10-29 10:31:00 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 223, size: 8236 bytes +2025-10-29 10:31:00 [http-nio-8084-exec-2] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 224 +2025-10-29 10:31:00 [http-nio-8084-exec-2] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 224, size: 8236 bytes +2025-10-29 10:31:00 [http-nio-8084-exec-4] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 225 +2025-10-29 10:31:00 [http-nio-8084-exec-4] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 225, size: 8236 bytes +2025-10-29 10:31:01 [http-nio-8084-exec-5] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 226 +2025-10-29 10:31:01 [http-nio-8084-exec-5] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 226, size: 8236 bytes +2025-10-29 10:31:01 [http-nio-8084-exec-6] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 227 +2025-10-29 10:31:01 [http-nio-8084-exec-6] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 227, size: 8236 bytes +2025-10-29 10:31:01 [http-nio-8084-exec-7] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 228 +2025-10-29 10:31:01 [http-nio-8084-exec-7] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 228, size: 8236 bytes +2025-10-29 10:31:01 [http-nio-8084-exec-8] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 229 +2025-10-29 10:31:01 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 229, size: 8236 bytes +2025-10-29 10:31:02 [http-nio-8084-exec-9] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 230 +2025-10-29 10:31:02 [http-nio-8084-exec-9] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 230, size: 8236 bytes +2025-10-29 10:31:02 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:31:02 [scheduling-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 조회 완료 - meetingId: test-meeting-001, count: 19 +2025-10-29 10:31:02 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 오디오 청크 조회 완료 - meetingId: test-meeting-001, chunks: 19개 +2025-10-29 10:31:02 [scheduling-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 병합 완료 - chunks: 19, totalSize: 156484 +2025-10-29 10:31:02 [scheduling-1] WARN c.u.h.stt.service.AzureSpeechService - Azure Speech Service 비활성화 - 시뮬레이션 결과 반환 +2025-10-29 10:31:02 [scheduling-1] INFO c.u.h.stt.service.AzureSpeechService - [시뮬레이션] 음성 인식 결과: 기술 스택 선정에 대한 의견을 나누고 있습니다. +2025-10-29 10:31:02 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - Event Hub 이벤트 발행 완료 - meetingId: test-meeting-001, text: 기술 스택 선정에 대한 의견을 나누고 있습니다. +2025-10-29 10:31:02 [ForkJoinPool.commonPool-worker-1] DEBUG c.u.h.s.e.p.EventHubPublisher - Event Hub 발행 시뮬레이션: +2025-10-29 10:31:02 [ForkJoinPool.commonPool-worker-1] DEBUG c.u.h.s.e.p.EventHubPublisher - Topic: transcription-events +2025-10-29 10:31:02 [ForkJoinPool.commonPool-worker-1] DEBUG c.u.h.s.e.p.EventHubPublisher - Event Data: {"eventId":"03b72c43-169e-4e78-a2ed-f32962fdb2bf","eventType":"SegmentCreated","segmentId":"0d6fe553-1d93-4a35-b1d9-135cce06ecd6","recordingId":"test-meeting-001","meetingId":"test-meeting-001","text":"기술 스택 선정에 대한 의견을 나누고 있습니다.","speakerId":"UNKNOWN","speakerName":"참석자","timestamp":[2025,10,29,10,31,2,581169000],"duration":5.0,"confidence":0.85,"warningFlag":false,"eventTime":[2025,10,29,10,31,2,581180000]} +2025-10-29 10:31:02 [ForkJoinPool.commonPool-worker-1] INFO c.u.h.s.e.p.EventHubPublisher - 이벤트 발행 완료 - topic: transcription-events, event: SegmentCreated +2025-10-29 10:31:02 [scheduling-1] INFO c.u.h.s.c.AudioWebSocketHandler - STT 결과 전송 완료 - meetingId: test-meeting-001, sessions: 1개, text: 기술 스택 선정에 대한 의견을 나누고 있습니다. +2025-10-29 10:31:02 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - WebSocket 결과 전송 완료 - meetingId: test-meeting-001, text: 기술 스택 선정에 대한 의견을 나누고 있습니다. +2025-10-29 10:31:02 [scheduling-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 삭제 완료 - meetingId: test-meeting-001 +2025-10-29 10:31:02 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 회의 처리 완료 - meetingId: test-meeting-001, text: 기술 스택 선정에 대한 의견을 나누고 있습니다. +2025-10-29 10:31:02 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:31:02 [http-nio-8084-exec-10] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 231 +2025-10-29 10:31:02 [http-nio-8084-exec-10] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 231, size: 8236 bytes +2025-10-29 10:31:02 [http-nio-8084-exec-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 232 +2025-10-29 10:31:02 [http-nio-8084-exec-1] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 232, size: 8236 bytes +2025-10-29 10:31:03 [http-nio-8084-exec-3] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 233 +2025-10-29 10:31:03 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 233, size: 8236 bytes +2025-10-29 10:31:03 [http-nio-8084-exec-2] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 234 +2025-10-29 10:31:03 [http-nio-8084-exec-2] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 234, size: 8236 bytes +2025-10-29 10:31:03 [http-nio-8084-exec-4] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 235 +2025-10-29 10:31:03 [http-nio-8084-exec-4] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 235, size: 8236 bytes +2025-10-29 10:31:03 [http-nio-8084-exec-5] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 236 +2025-10-29 10:31:03 [http-nio-8084-exec-5] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 236, size: 8236 bytes +2025-10-29 10:31:04 [http-nio-8084-exec-6] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 237 +2025-10-29 10:31:04 [http-nio-8084-exec-6] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 237, size: 8236 bytes +2025-10-29 10:31:04 [http-nio-8084-exec-7] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 238 +2025-10-29 10:31:04 [http-nio-8084-exec-7] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 238, size: 8236 bytes +2025-10-29 10:31:04 [http-nio-8084-exec-8] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 239 +2025-10-29 10:31:04 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 239, size: 8236 bytes +2025-10-29 10:31:04 [http-nio-8084-exec-9] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 240 +2025-10-29 10:31:04 [http-nio-8084-exec-9] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 240, size: 8236 bytes +2025-10-29 10:31:05 [http-nio-8084-exec-10] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 241 +2025-10-29 10:31:05 [http-nio-8084-exec-10] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 241, size: 8236 bytes +2025-10-29 10:31:05 [http-nio-8084-exec-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 242 +2025-10-29 10:31:05 [http-nio-8084-exec-1] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 242, size: 8236 bytes +2025-10-29 10:31:05 [http-nio-8084-exec-3] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 243 +2025-10-29 10:31:05 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 243, size: 8236 bytes +2025-10-29 10:31:05 [http-nio-8084-exec-2] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 244 +2025-10-29 10:31:05 [http-nio-8084-exec-2] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 244, size: 8236 bytes +2025-10-29 10:31:06 [http-nio-8084-exec-4] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 245 +2025-10-29 10:31:06 [http-nio-8084-exec-4] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 245, size: 8236 bytes +2025-10-29 10:31:06 [http-nio-8084-exec-5] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 246 +2025-10-29 10:31:06 [http-nio-8084-exec-5] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 246, size: 8236 bytes +2025-10-29 10:31:06 [http-nio-8084-exec-6] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 247 +2025-10-29 10:31:06 [http-nio-8084-exec-6] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 247, size: 8236 bytes +2025-10-29 10:31:06 [http-nio-8084-exec-7] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 248 +2025-10-29 10:31:06 [http-nio-8084-exec-7] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 248, size: 8236 bytes +2025-10-29 10:31:07 [http-nio-8084-exec-8] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 249 +2025-10-29 10:31:07 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 249, size: 8236 bytes +2025-10-29 10:31:07 [http-nio-8084-exec-9] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 250 +2025-10-29 10:31:07 [http-nio-8084-exec-9] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 250, size: 8236 bytes +2025-10-29 10:31:07 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:31:07 [http-nio-8084-exec-10] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 251 +2025-10-29 10:31:07 [http-nio-8084-exec-10] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 251, size: 8236 bytes +2025-10-29 10:31:07 [scheduling-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 조회 완료 - meetingId: test-meeting-001, count: 20 +2025-10-29 10:31:07 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 오디오 청크 조회 완료 - meetingId: test-meeting-001, chunks: 20개 +2025-10-29 10:31:07 [scheduling-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 병합 완료 - chunks: 20, totalSize: 164720 +2025-10-29 10:31:07 [scheduling-1] WARN c.u.h.stt.service.AzureSpeechService - Azure Speech Service 비활성화 - 시뮬레이션 결과 반환 +2025-10-29 10:31:07 [scheduling-1] INFO c.u.h.stt.service.AzureSpeechService - [시뮬레이션] 음성 인식 결과: 마케팅 예산 배분 계획을 수립해야 합니다. +2025-10-29 10:31:07 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - Event Hub 이벤트 발행 완료 - meetingId: test-meeting-001, text: 마케팅 예산 배분 계획을 수립해야 합니다. +2025-10-29 10:31:07 [ForkJoinPool.commonPool-worker-1] DEBUG c.u.h.s.e.p.EventHubPublisher - Event Hub 발행 시뮬레이션: +2025-10-29 10:31:07 [ForkJoinPool.commonPool-worker-1] DEBUG c.u.h.s.e.p.EventHubPublisher - Topic: transcription-events +2025-10-29 10:31:07 [ForkJoinPool.commonPool-worker-1] DEBUG c.u.h.s.e.p.EventHubPublisher - Event Data: {"eventId":"9d9f91b6-233b-452c-aa6b-1f19d3b67fb5","eventType":"SegmentCreated","segmentId":"70062cd7-ffb4-4abb-b6f5-c1643f0ec5aa","recordingId":"test-meeting-001","meetingId":"test-meeting-001","text":"마케팅 예산 배분 계획을 수립해야 합니다.","speakerId":"UNKNOWN","speakerName":"참석자","timestamp":[2025,10,29,10,31,7,677347000],"duration":5.0,"confidence":0.85,"warningFlag":false,"eventTime":[2025,10,29,10,31,7,677371000]} +2025-10-29 10:31:07 [ForkJoinPool.commonPool-worker-1] INFO c.u.h.s.e.p.EventHubPublisher - 이벤트 발행 완료 - topic: transcription-events, event: SegmentCreated +2025-10-29 10:31:07 [scheduling-1] INFO c.u.h.s.c.AudioWebSocketHandler - STT 결과 전송 완료 - meetingId: test-meeting-001, sessions: 1개, text: 마케팅 예산 배분 계획을 수립해야 합니다. +2025-10-29 10:31:07 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - WebSocket 결과 전송 완료 - meetingId: test-meeting-001, text: 마케팅 예산 배분 계획을 수립해야 합니다. +2025-10-29 10:31:07 [scheduling-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 삭제 완료 - meetingId: test-meeting-001 +2025-10-29 10:31:07 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 회의 처리 완료 - meetingId: test-meeting-001, text: 마케팅 예산 배분 계획을 수립해야 합니다. +2025-10-29 10:31:07 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:31:07 [http-nio-8084-exec-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 252 +2025-10-29 10:31:07 [http-nio-8084-exec-1] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 252, size: 8236 bytes +2025-10-29 10:31:08 [http-nio-8084-exec-3] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 253 +2025-10-29 10:31:08 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 253, size: 8236 bytes +2025-10-29 10:31:08 [http-nio-8084-exec-2] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 254 +2025-10-29 10:31:08 [http-nio-8084-exec-2] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 254, size: 8236 bytes +2025-10-29 10:31:08 [http-nio-8084-exec-4] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 255 +2025-10-29 10:31:08 [http-nio-8084-exec-4] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 255, size: 8236 bytes +2025-10-29 10:31:08 [http-nio-8084-exec-5] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 256 +2025-10-29 10:31:08 [http-nio-8084-exec-5] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 256, size: 8236 bytes +2025-10-29 10:31:09 [http-nio-8084-exec-6] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 257 +2025-10-29 10:31:09 [http-nio-8084-exec-6] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 257, size: 8236 bytes +2025-10-29 10:31:09 [http-nio-8084-exec-7] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 258 +2025-10-29 10:31:09 [http-nio-8084-exec-7] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 258, size: 8236 bytes +2025-10-29 10:31:09 [http-nio-8084-exec-8] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 259 +2025-10-29 10:31:09 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 259, size: 8236 bytes +2025-10-29 10:31:09 [http-nio-8084-exec-9] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 260 +2025-10-29 10:31:09 [http-nio-8084-exec-9] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 260, size: 8236 bytes +2025-10-29 10:31:10 [http-nio-8084-exec-10] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 261 +2025-10-29 10:31:10 [http-nio-8084-exec-10] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 261, size: 8236 bytes +2025-10-29 10:31:10 [http-nio-8084-exec-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 262 +2025-10-29 10:31:10 [http-nio-8084-exec-1] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 262, size: 8236 bytes +2025-10-29 10:31:10 [http-nio-8084-exec-3] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 263 +2025-10-29 10:31:10 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 263, size: 8236 bytes +2025-10-29 10:31:10 [http-nio-8084-exec-2] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 264 +2025-10-29 10:31:10 [http-nio-8084-exec-2] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 264, size: 8236 bytes +2025-10-29 10:31:11 [http-nio-8084-exec-4] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 265 +2025-10-29 10:31:11 [http-nio-8084-exec-4] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 265, size: 8236 bytes +2025-10-29 10:31:11 [http-nio-8084-exec-5] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 266 +2025-10-29 10:31:11 [http-nio-8084-exec-5] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 266, size: 8236 bytes +2025-10-29 10:31:11 [http-nio-8084-exec-6] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 267 +2025-10-29 10:31:11 [http-nio-8084-exec-6] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 267, size: 8236 bytes +2025-10-29 10:31:12 [http-nio-8084-exec-7] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 268 +2025-10-29 10:31:12 [http-nio-8084-exec-7] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 268, size: 8236 bytes +2025-10-29 10:31:12 [SpringApplicationShutdownHook] INFO o.s.o.j.LocalContainerEntityManagerFactoryBean - Closing JPA EntityManagerFactory for persistence unit 'default' +2025-10-29 10:31:12 [SpringApplicationShutdownHook] TRACE o.h.type.spi.TypeConfiguration$Scope - Handling #sessionFactoryClosed from [org.hibernate.internal.SessionFactoryImpl@ab11e76] for TypeConfiguration +2025-10-29 10:31:12 [SpringApplicationShutdownHook] DEBUG o.h.type.spi.TypeConfiguration$Scope - Un-scoping TypeConfiguration [org.hibernate.type.spi.TypeConfiguration$Scope@44e18b09] from SessionFactory [org.hibernate.internal.SessionFactoryImpl@ab11e76] +2025-10-29 10:31:12 [SpringApplicationShutdownHook] INFO com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Shutdown initiated... +2025-10-29 10:31:12 [SpringApplicationShutdownHook] INFO com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Shutdown completed. +2025-10-29 10:31:12 [SpringApplicationShutdownHook] ERROR c.u.h.s.c.AudioWebSocketHandler - WebSocket 전송 오류 - sessionId: 854e499d-74e2-2307-d25a-a0c6b3d1ed59 +java.io.IOException: java.nio.channels.ClosedChannelException + at org.apache.tomcat.websocket.WsRemoteEndpointImplBase.sendMessageBlockInternal(WsRemoteEndpointImplBase.java:326) + at org.apache.tomcat.websocket.WsRemoteEndpointImplBase.sendMessageBlock(WsRemoteEndpointImplBase.java:266) + at org.apache.tomcat.websocket.WsSession.sendCloseMessage(WsSession.java:792) + at org.apache.tomcat.websocket.WsSession.doClose(WsSession.java:589) + at org.apache.tomcat.websocket.WsSession.doClose(WsSession.java:556) + at org.apache.tomcat.websocket.WsSession.close(WsSession.java:544) + at org.apache.tomcat.websocket.WsWebSocketContainer.destroy(WsWebSocketContainer.java:1024) + at org.apache.tomcat.websocket.server.WsContextListener.contextDestroyed(WsContextListener.java:46) + at org.apache.catalina.core.StandardContext.listenerStop(StandardContext.java:4039) + at org.apache.catalina.core.StandardContext.stopInternal(StandardContext.java:4648) + at org.apache.catalina.util.LifecycleBase.stop(LifecycleBase.java:231) + at org.apache.catalina.core.ContainerBase$StopChild.call(ContainerBase.java:1219) + at org.apache.catalina.core.ContainerBase$StopChild.call(ContainerBase.java:1208) + at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:317) + at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:75) + at java.base/java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:148) + at org.apache.catalina.core.ContainerBase.stopInternal(ContainerBase.java:814) + at org.apache.catalina.util.LifecycleBase.stop(LifecycleBase.java:231) + at org.apache.catalina.core.ContainerBase$StopChild.call(ContainerBase.java:1219) + at org.apache.catalina.core.ContainerBase$StopChild.call(ContainerBase.java:1208) + at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:317) + at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:75) + at java.base/java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:148) + at org.apache.catalina.core.ContainerBase.stopInternal(ContainerBase.java:814) + at org.apache.catalina.util.LifecycleBase.stop(LifecycleBase.java:231) + at org.apache.catalina.core.StandardService.stopInternal(StandardService.java:471) + at org.apache.catalina.util.LifecycleBase.stop(LifecycleBase.java:231) + at org.apache.catalina.core.StandardServer.stopInternal(StandardServer.java:915) + at org.apache.catalina.util.LifecycleBase.stop(LifecycleBase.java:231) + at org.apache.catalina.startup.Tomcat.stop(Tomcat.java:447) + at org.springframework.boot.web.embedded.tomcat.TomcatWebServer.stopTomcat(TomcatWebServer.java:301) + at org.springframework.boot.web.embedded.tomcat.TomcatWebServer.destroy(TomcatWebServer.java:374) + at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.doClose(ServletWebServerApplicationContext.java:177) + at org.springframework.context.support.AbstractApplicationContext.close(AbstractApplicationContext.java:1102) + at org.springframework.boot.SpringApplicationShutdownHook.closeAndWait(SpringApplicationShutdownHook.java:145) + at java.base/java.lang.Iterable.forEach(Iterable.java:75) + at org.springframework.boot.SpringApplicationShutdownHook.run(SpringApplicationShutdownHook.java:114) + at java.base/java.lang.Thread.run(Thread.java:1575) +Caused by: java.nio.channels.ClosedChannelException: null + at org.apache.tomcat.util.net.NioChannel$1.write(NioChannel.java:273) + at org.apache.tomcat.util.net.NioEndpoint$NioSocketWrapper$NioOperationState.run(NioEndpoint.java:1632) + at org.apache.tomcat.util.net.SocketWrapperBase$OperationState.start(SocketWrapperBase.java:1051) + at org.apache.tomcat.util.net.SocketWrapperBase.vectoredOperation(SocketWrapperBase.java:1440) + at org.apache.tomcat.util.net.SocketWrapperBase.write(SocketWrapperBase.java:1366) + at org.apache.tomcat.util.net.SocketWrapperBase.write(SocketWrapperBase.java:1337) + at org.apache.tomcat.websocket.server.WsRemoteEndpointImplServer.doWrite(WsRemoteEndpointImplServer.java:171) + at org.apache.tomcat.websocket.WsRemoteEndpointImplBase.writeMessagePart(WsRemoteEndpointImplBase.java:521) + at org.apache.tomcat.websocket.WsRemoteEndpointImplBase.sendMessageBlockInternal(WsRemoteEndpointImplBase.java:313) + ... 37 common frames omitted +2025-10-29 10:31:12 [SpringApplicationShutdownHook] INFO c.u.h.s.c.AudioWebSocketHandler - WebSocket 연결 종료 - sessionId: 854e499d-74e2-2307-d25a-a0c6b3d1ed59, meetingId: test-meeting-001, status: CloseStatus[code=1001, reason=The web application is stopping] +2025-10-29 10:31:41 [main] INFO c.unicorn.hgzero.stt.SttApplication - Starting SttApplication using Java 23.0.2 with PID 52571 (/Users/jominseo/HGZero/stt/build/classes/java/main started by jominseo in /Users/jominseo/HGZero/stt) +2025-10-29 10:31:41 [main] DEBUG c.unicorn.hgzero.stt.SttApplication - Running with Spring Boot v3.3.5, Spring v6.1.14 +2025-10-29 10:31:41 [main] INFO c.unicorn.hgzero.stt.SttApplication - The following 1 profile is active: "dev" +2025-10-29 10:31:42 [main] INFO o.s.d.r.c.RepositoryConfigurationDelegate - Multiple Spring Data modules found, entering strict repository configuration mode +2025-10-29 10:31:42 [main] INFO o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data JPA repositories in DEFAULT mode. +2025-10-29 10:31:42 [main] INFO o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 46 ms. Found 3 JPA repository interfaces. +2025-10-29 10:31:42 [main] INFO o.s.d.r.c.RepositoryConfigurationDelegate - Multiple Spring Data modules found, entering strict repository configuration mode +2025-10-29 10:31:42 [main] INFO o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data Redis repositories in DEFAULT mode. +2025-10-29 10:31: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.stt.repository.jpa.RecordingRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-10-29 10:31: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.stt.repository.jpa.TranscriptSegmentRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-10-29 10:31: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.stt.repository.jpa.TranscriptionRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-10-29 10:31:42 [main] INFO o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 7 ms. Found 0 Redis repository interfaces. +2025-10-29 10:31:42 [main] INFO o.s.b.w.e.tomcat.TomcatWebServer - Tomcat initialized with port 8084 (http) +2025-10-29 10:31:42 [main] INFO o.a.catalina.core.StandardService - Starting service [Tomcat] +2025-10-29 10:31:42 [main] INFO o.a.catalina.core.StandardEngine - Starting Servlet engine: [Apache Tomcat/10.1.31] +2025-10-29 10:31:42 [main] INFO o.a.c.c.C.[Tomcat].[localhost].[/] - Initializing Spring embedded WebApplicationContext +2025-10-29 10:31:42 [main] INFO o.s.b.w.s.c.ServletWebServerApplicationContext - Root WebApplicationContext: initialization completed in 811 ms +2025-10-29 10:31:42 [main] INFO o.h.jpa.internal.util.LogHelper - HHH000204: Processing PersistenceUnitInfo [name: default] +2025-10-29 10:31:42 [main] INFO org.hibernate.Version - HHH000412: Hibernate ORM core version 6.5.3.Final +2025-10-29 10:31:42 [main] INFO o.h.c.i.RegionFactoryInitiator - HHH000026: Second-level cache disabled +2025-10-29 10:31:42 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration boolean -> org.hibernate.type.BasicTypeReference@fefb66c +2025-10-29 10:31:42 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration boolean -> org.hibernate.type.BasicTypeReference@fefb66c +2025-10-29 10:31:42 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Boolean -> org.hibernate.type.BasicTypeReference@fefb66c +2025-10-29 10:31:42 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration numeric_boolean -> org.hibernate.type.BasicTypeReference@6d7556a8 +2025-10-29 10:31:42 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration org.hibernate.type.NumericBooleanConverter -> org.hibernate.type.BasicTypeReference@6d7556a8 +2025-10-29 10:31:42 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration true_false -> org.hibernate.type.BasicTypeReference@48860139 +2025-10-29 10:31:42 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration org.hibernate.type.TrueFalseConverter -> org.hibernate.type.BasicTypeReference@48860139 +2025-10-29 10:31:42 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration yes_no -> org.hibernate.type.BasicTypeReference@7e0883f3 +2025-10-29 10:31:42 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration org.hibernate.type.YesNoConverter -> org.hibernate.type.BasicTypeReference@7e0883f3 +2025-10-29 10:31:42 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration byte -> org.hibernate.type.BasicTypeReference@ca60688 +2025-10-29 10:31:42 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration byte -> org.hibernate.type.BasicTypeReference@ca60688 +2025-10-29 10:31:42 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Byte -> org.hibernate.type.BasicTypeReference@ca60688 +2025-10-29 10:31:42 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration binary -> org.hibernate.type.BasicTypeReference@4ba1c1a2 +2025-10-29 10:31:42 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration byte[] -> org.hibernate.type.BasicTypeReference@4ba1c1a2 +2025-10-29 10:31:42 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration [B -> org.hibernate.type.BasicTypeReference@4ba1c1a2 +2025-10-29 10:31:42 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration binary_wrapper -> org.hibernate.type.BasicTypeReference@33568e26 +2025-10-29 10:31:42 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration wrapper-binary -> org.hibernate.type.BasicTypeReference@33568e26 +2025-10-29 10:31:42 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration image -> org.hibernate.type.BasicTypeReference@97b84a4 +2025-10-29 10:31:42 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration blob -> org.hibernate.type.BasicTypeReference@35555145 +2025-10-29 10:31:42 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.sql.Blob -> org.hibernate.type.BasicTypeReference@35555145 +2025-10-29 10:31:42 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration materialized_blob -> org.hibernate.type.BasicTypeReference@70bc3a9c +2025-10-29 10:31:42 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration materialized_blob_wrapper -> org.hibernate.type.BasicTypeReference@771cbd13 +2025-10-29 10:31:42 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration short -> org.hibernate.type.BasicTypeReference@229749f0 +2025-10-29 10:31:42 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration short -> org.hibernate.type.BasicTypeReference@229749f0 +2025-10-29 10:31:42 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Short -> org.hibernate.type.BasicTypeReference@229749f0 +2025-10-29 10:31:42 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration integer -> org.hibernate.type.BasicTypeReference@3d57fb9e +2025-10-29 10:31:42 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration int -> org.hibernate.type.BasicTypeReference@3d57fb9e +2025-10-29 10:31:42 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Integer -> org.hibernate.type.BasicTypeReference@3d57fb9e +2025-10-29 10:31:42 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration long -> org.hibernate.type.BasicTypeReference@2c2e5e72 +2025-10-29 10:31:42 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration long -> org.hibernate.type.BasicTypeReference@2c2e5e72 +2025-10-29 10:31:42 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Long -> org.hibernate.type.BasicTypeReference@2c2e5e72 +2025-10-29 10:31:42 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration float -> org.hibernate.type.BasicTypeReference@3e489ac1 +2025-10-29 10:31:42 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration float -> org.hibernate.type.BasicTypeReference@3e489ac1 +2025-10-29 10:31:42 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Float -> org.hibernate.type.BasicTypeReference@3e489ac1 +2025-10-29 10:31:42 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration double -> org.hibernate.type.BasicTypeReference@26888c31 +2025-10-29 10:31:42 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration double -> org.hibernate.type.BasicTypeReference@26888c31 +2025-10-29 10:31:42 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Double -> org.hibernate.type.BasicTypeReference@26888c31 +2025-10-29 10:31:42 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration big_integer -> org.hibernate.type.BasicTypeReference@24010875 +2025-10-29 10:31:42 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.math.BigInteger -> org.hibernate.type.BasicTypeReference@24010875 +2025-10-29 10:31:42 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration big_decimal -> org.hibernate.type.BasicTypeReference@7a021f49 +2025-10-29 10:31:42 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.math.BigDecimal -> org.hibernate.type.BasicTypeReference@7a021f49 +2025-10-29 10:31:42 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration character -> org.hibernate.type.BasicTypeReference@e60c5a +2025-10-29 10:31:42 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration char -> org.hibernate.type.BasicTypeReference@e60c5a +2025-10-29 10:31:42 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Character -> org.hibernate.type.BasicTypeReference@e60c5a +2025-10-29 10:31:42 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration character_nchar -> org.hibernate.type.BasicTypeReference@626df173 +2025-10-29 10:31:42 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration string -> org.hibernate.type.BasicTypeReference@4e030feb +2025-10-29 10:31:42 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.String -> org.hibernate.type.BasicTypeReference@4e030feb +2025-10-29 10:31:42 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration nstring -> org.hibernate.type.BasicTypeReference@2411b935 +2025-10-29 10:31:42 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration characters -> org.hibernate.type.BasicTypeReference@1425e531 +2025-10-29 10:31:42 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration char[] -> org.hibernate.type.BasicTypeReference@1425e531 +2025-10-29 10:31:42 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration [C -> org.hibernate.type.BasicTypeReference@1425e531 +2025-10-29 10:31:42 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration wrapper-characters -> org.hibernate.type.BasicTypeReference@194e78af +2025-10-29 10:31:42 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration text -> org.hibernate.type.BasicTypeReference@4fe4503a +2025-10-29 10:31:42 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration ntext -> org.hibernate.type.BasicTypeReference@669580e2 +2025-10-29 10:31:42 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration clob -> org.hibernate.type.BasicTypeReference@5d22ed6c +2025-10-29 10:31:42 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.sql.Clob -> org.hibernate.type.BasicTypeReference@5d22ed6c +2025-10-29 10:31:42 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration nclob -> org.hibernate.type.BasicTypeReference@37c37d67 +2025-10-29 10:31:42 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.sql.NClob -> org.hibernate.type.BasicTypeReference@37c37d67 +2025-10-29 10:31:42 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration materialized_clob -> org.hibernate.type.BasicTypeReference@5a4b8e25 +2025-10-29 10:31:42 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration materialized_clob_char_array -> org.hibernate.type.BasicTypeReference@1013871e +2025-10-29 10:31:42 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration materialized_clob_character_array -> org.hibernate.type.BasicTypeReference@5a9051fd +2025-10-29 10:31:42 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration materialized_nclob -> org.hibernate.type.BasicTypeReference@7614378d +2025-10-29 10:31:42 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration materialized_nclob_character_array -> org.hibernate.type.BasicTypeReference@7028b5cc +2025-10-29 10:31:42 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration materialized_nclob_char_array -> org.hibernate.type.BasicTypeReference@7c0ff7a0 +2025-10-29 10:31:42 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration Duration -> org.hibernate.type.BasicTypeReference@24c84e65 +2025-10-29 10:31:42 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.Duration -> org.hibernate.type.BasicTypeReference@24c84e65 +2025-10-29 10:31:42 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration LocalDateTime -> org.hibernate.type.BasicTypeReference@7337bd2e +2025-10-29 10:31:42 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.LocalDateTime -> org.hibernate.type.BasicTypeReference@7337bd2e +2025-10-29 10:31:42 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration LocalDate -> org.hibernate.type.BasicTypeReference@4604e051 +2025-10-29 10:31:42 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.LocalDate -> org.hibernate.type.BasicTypeReference@4604e051 +2025-10-29 10:31:42 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration LocalTime -> org.hibernate.type.BasicTypeReference@4535bdc6 +2025-10-29 10:31:42 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.LocalTime -> org.hibernate.type.BasicTypeReference@4535bdc6 +2025-10-29 10:31:42 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration OffsetDateTime -> org.hibernate.type.BasicTypeReference@23e86863 +2025-10-29 10:31:42 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.OffsetDateTime -> org.hibernate.type.BasicTypeReference@23e86863 +2025-10-29 10:31:42 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration OffsetDateTimeWithTimezone -> org.hibernate.type.BasicTypeReference@6df87ffd +2025-10-29 10:31:42 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration OffsetDateTimeWithoutTimezone -> org.hibernate.type.BasicTypeReference@c1f0c7b +2025-10-29 10:31:42 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration OffsetTime -> org.hibernate.type.BasicTypeReference@642c5bb3 +2025-10-29 10:31:42 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.OffsetTime -> org.hibernate.type.BasicTypeReference@642c5bb3 +2025-10-29 10:31:42 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration OffsetTimeUtc -> org.hibernate.type.BasicTypeReference@4e79c25 +2025-10-29 10:31:42 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration OffsetTimeWithTimezone -> org.hibernate.type.BasicTypeReference@2ace1cd3 +2025-10-29 10:31:42 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration OffsetTimeWithoutTimezone -> org.hibernate.type.BasicTypeReference@5e46a125 +2025-10-29 10:31:42 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration ZonedDateTime -> org.hibernate.type.BasicTypeReference@5831989d +2025-10-29 10:31:42 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.ZonedDateTime -> org.hibernate.type.BasicTypeReference@5831989d +2025-10-29 10:31:42 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration ZonedDateTimeWithTimezone -> org.hibernate.type.BasicTypeReference@608f310a +2025-10-29 10:31:42 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration ZonedDateTimeWithoutTimezone -> org.hibernate.type.BasicTypeReference@3a7d914c +2025-10-29 10:31:42 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration date -> org.hibernate.type.BasicTypeReference@515940af +2025-10-29 10:31:42 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.sql.Date -> org.hibernate.type.BasicTypeReference@515940af +2025-10-29 10:31:42 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration time -> org.hibernate.type.BasicTypeReference@5f8df69 +2025-10-29 10:31:42 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.sql.Time -> org.hibernate.type.BasicTypeReference@5f8df69 +2025-10-29 10:31:42 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration timestamp -> org.hibernate.type.BasicTypeReference@1ce6a9bd +2025-10-29 10:31:42 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.sql.Timestamp -> org.hibernate.type.BasicTypeReference@1ce6a9bd +2025-10-29 10:31:42 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.util.Date -> org.hibernate.type.BasicTypeReference@1ce6a9bd +2025-10-29 10:31:42 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration calendar -> org.hibernate.type.BasicTypeReference@4a47bc9c +2025-10-29 10:31:42 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.util.Calendar -> org.hibernate.type.BasicTypeReference@4a47bc9c +2025-10-29 10:31:42 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.util.GregorianCalendar -> org.hibernate.type.BasicTypeReference@4a47bc9c +2025-10-29 10:31:42 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration calendar_date -> org.hibernate.type.BasicTypeReference@5100c143 +2025-10-29 10:31:42 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration calendar_time -> org.hibernate.type.BasicTypeReference@12404f9d +2025-10-29 10:31:42 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration instant -> org.hibernate.type.BasicTypeReference@3b42b729 +2025-10-29 10:31:42 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.Instant -> org.hibernate.type.BasicTypeReference@3b42b729 +2025-10-29 10:31:42 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration uuid -> org.hibernate.type.BasicTypeReference@4c164f81 +2025-10-29 10:31:42 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.util.UUID -> org.hibernate.type.BasicTypeReference@4c164f81 +2025-10-29 10:31:42 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration pg-uuid -> org.hibernate.type.BasicTypeReference@4c164f81 +2025-10-29 10:31:42 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration uuid-binary -> org.hibernate.type.BasicTypeReference@1bcb8599 +2025-10-29 10:31:42 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration uuid-char -> org.hibernate.type.BasicTypeReference@b671dda +2025-10-29 10:31:42 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration class -> org.hibernate.type.BasicTypeReference@25b20860 +2025-10-29 10:31:42 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Class -> org.hibernate.type.BasicTypeReference@25b20860 +2025-10-29 10:31:42 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration currency -> org.hibernate.type.BasicTypeReference@5ba63110 +2025-10-29 10:31:42 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration Currency -> org.hibernate.type.BasicTypeReference@5ba63110 +2025-10-29 10:31:42 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.util.Currency -> org.hibernate.type.BasicTypeReference@5ba63110 +2025-10-29 10:31:42 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration locale -> org.hibernate.type.BasicTypeReference@1c0680b0 +2025-10-29 10:31:42 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.util.Locale -> org.hibernate.type.BasicTypeReference@1c0680b0 +2025-10-29 10:31:42 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration serializable -> org.hibernate.type.BasicTypeReference@2f3cd727 +2025-10-29 10:31:42 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.io.Serializable -> org.hibernate.type.BasicTypeReference@2f3cd727 +2025-10-29 10:31:42 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration timezone -> org.hibernate.type.BasicTypeReference@1af82ba8 +2025-10-29 10:31:42 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.util.TimeZone -> org.hibernate.type.BasicTypeReference@1af82ba8 +2025-10-29 10:31:42 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration ZoneOffset -> org.hibernate.type.BasicTypeReference@703cb756 +2025-10-29 10:31:42 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.ZoneOffset -> org.hibernate.type.BasicTypeReference@703cb756 +2025-10-29 10:31:42 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration url -> org.hibernate.type.BasicTypeReference@5897aae1 +2025-10-29 10:31:42 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.net.URL -> org.hibernate.type.BasicTypeReference@5897aae1 +2025-10-29 10:31:42 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration vector -> org.hibernate.type.BasicTypeReference@11dbcb3b +2025-10-29 10:31:42 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration row_version -> org.hibernate.type.BasicTypeReference@4aa517c3 +2025-10-29 10:31:42 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration object -> org.hibernate.type.JavaObjectType@4e6280de +2025-10-29 10:31:42 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Object -> org.hibernate.type.JavaObjectType@4e6280de +2025-10-29 10:31:42 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration null -> org.hibernate.type.NullType@5909285b +2025-10-29 10:31:42 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration imm_date -> org.hibernate.type.BasicTypeReference@2059f785 +2025-10-29 10:31:42 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration imm_time -> org.hibernate.type.BasicTypeReference@3d9c8c3c +2025-10-29 10:31:42 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration imm_timestamp -> org.hibernate.type.BasicTypeReference@2dc73024 +2025-10-29 10:31:42 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration imm_calendar -> org.hibernate.type.BasicTypeReference@42cd0fc6 +2025-10-29 10:31:42 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration imm_calendar_date -> org.hibernate.type.BasicTypeReference@e5864c2 +2025-10-29 10:31:42 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration imm_calendar_time -> org.hibernate.type.BasicTypeReference@577cf459 +2025-10-29 10:31:42 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration imm_binary -> org.hibernate.type.BasicTypeReference@432eb882 +2025-10-29 10:31:42 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration imm_serializable -> org.hibernate.type.BasicTypeReference@69372c1e +2025-10-29 10:31:42 [main] INFO o.s.o.j.p.SpringPersistenceUnitInfo - No LoadTimeWeaver setup: ignoring JPA class transformer +2025-10-29 10:31:42 [main] INFO com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Starting... +2025-10-29 10:31:43 [main] WARN o.h.e.jdbc.spi.SqlExceptionHelper - SQL Error: 0, SQLState: 08001 +2025-10-29 10:31:43 [main] ERROR o.h.e.jdbc.spi.SqlExceptionHelper - Connection to localhost:5432 refused. Check that the hostname and port are correct and that the postmaster is accepting TCP/IP connections. +2025-10-29 10:31:43 [main] WARN o.h.e.j.e.i.JdbcEnvironmentInitiator - HHH000342: Could not obtain connection to query metadata +org.hibernate.exception.JDBCConnectionException: unable to obtain isolated JDBC connection [Connection to localhost:5432 refused. Check that the hostname and port are correct and that the postmaster is accepting TCP/IP connections.] [n/a] + at org.hibernate.exception.internal.SQLStateConversionDelegate.convert(SQLStateConversionDelegate.java:100) + 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.resource.transaction.backend.jdbc.internal.JdbcIsolationDelegate.delegateWork(JdbcIsolationDelegate.java:116) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.getJdbcEnvironmentUsingJdbcMetadata(JdbcEnvironmentInitiator.java:292) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:124) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:78) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:130) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:263) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:238) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:215) + at org.hibernate.boot.model.relational.Database.(Database.java:45) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:221) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:189) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:171) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1431) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1502) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:75) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:390) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:366) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1853) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1802) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:600) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:522) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:337) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:335) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:205) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:954) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:625) + at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:146) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:754) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:456) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:335) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:1363) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:1352) + at com.unicorn.hgzero.stt.SttApplication.main(SttApplication.java:29) +Caused by: org.postgresql.util.PSQLException: Connection to localhost:5432 refused. Check that the hostname and port are correct and that the postmaster is accepting TCP/IP connections. + at org.postgresql.core.v3.ConnectionFactoryImpl.openConnectionImpl(ConnectionFactoryImpl.java:352) + at org.postgresql.core.ConnectionFactory.openConnection(ConnectionFactory.java:54) + at org.postgresql.jdbc.PgConnection.(PgConnection.java:273) + at org.postgresql.Driver.makeConnection(Driver.java:446) + at org.postgresql.Driver.connect(Driver.java:298) + at com.zaxxer.hikari.util.DriverDataSource.getConnection(DriverDataSource.java:137) + at com.zaxxer.hikari.pool.PoolBase.newConnection(PoolBase.java:360) + at com.zaxxer.hikari.pool.PoolBase.newPoolEntry(PoolBase.java:202) + at com.zaxxer.hikari.pool.HikariPool.createPoolEntry(HikariPool.java:461) + at com.zaxxer.hikari.pool.HikariPool.checkFailFast(HikariPool.java:550) + at com.zaxxer.hikari.pool.HikariPool.(HikariPool.java:98) + at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:111) + at org.hibernate.engine.jdbc.connections.internal.DatasourceConnectionProviderImpl.getConnection(DatasourceConnectionProviderImpl.java:122) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator$ConnectionProviderJdbcConnectionAccess.obtainConnection(JdbcEnvironmentInitiator.java:439) + at org.hibernate.resource.transaction.backend.jdbc.internal.JdbcIsolationDelegate.delegateWork(JdbcIsolationDelegate.java:61) + ... 35 common frames omitted +Caused by: java.net.ConnectException: Connection refused + at java.base/sun.nio.ch.Net.pollConnect(Native Method) + at java.base/sun.nio.ch.Net.pollConnectNow(Net.java:682) + at java.base/sun.nio.ch.NioSocketImpl.timedFinishConnect(NioSocketImpl.java:542) + at java.base/sun.nio.ch.NioSocketImpl.connect(NioSocketImpl.java:592) + at java.base/java.net.SocksSocketImpl.connect(SocksSocketImpl.java:327) + at java.base/java.net.Socket.connect(Socket.java:760) + at org.postgresql.core.PGStream.createSocket(PGStream.java:260) + at org.postgresql.core.PGStream.(PGStream.java:121) + at org.postgresql.core.v3.ConnectionFactoryImpl.tryConnect(ConnectionFactoryImpl.java:140) + at org.postgresql.core.v3.ConnectionFactoryImpl.openConnectionImpl(ConnectionFactoryImpl.java:268) + ... 49 common frames omitted +2025-10-29 10:31: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 10:31:43 [main] DEBUG o.h.t.d.sql.spi.DdlTypeRegistry - addDescriptor(2003, org.hibernate.type.descriptor.sql.internal.ArrayDdlTypeImpl@1eab0700) replaced previous registration(org.hibernate.type.descriptor.sql.internal.ArrayDdlTypeImpl@7e7391e8) +2025-10-29 10:31:43 [main] DEBUG o.h.t.d.sql.spi.DdlTypeRegistry - addDescriptor(6, org.hibernate.type.descriptor.sql.internal.CapacityDependentDdlType@1fa44f66) replaced previous registration(org.hibernate.type.descriptor.sql.internal.DdlTypeImpl@4229b92c) +2025-10-29 10:31:44 [main] DEBUG o.h.t.d.jdbc.spi.JdbcTypeRegistry - addDescriptor(2004, BlobTypeDescriptor(BLOB_BINDING)) replaced previous registration(BlobTypeDescriptor(DEFAULT)) +2025-10-29 10:31:44 [main] DEBUG o.h.t.d.jdbc.spi.JdbcTypeRegistry - addDescriptor(2005, ClobTypeDescriptor(CLOB_BINDING)) replaced previous registration(ClobTypeDescriptor(DEFAULT)) +2025-10-29 10:31:44 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration JAVA_OBJECT -> org.hibernate.type.JavaObjectType@230d013b +2025-10-29 10:31:44 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Object -> org.hibernate.type.JavaObjectType@230d013b +2025-10-29 10:31:44 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Type registration key [java.lang.Object] overrode previous entry : `org.hibernate.type.JavaObjectType@4e6280de` +2025-10-29 10:31:44 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration org.hibernate.type.DurationType -> basicType@1(java.time.Duration,3015) +2025-10-29 10:31:44 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration Duration -> basicType@1(java.time.Duration,3015) +2025-10-29 10:31:44 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.Duration -> basicType@1(java.time.Duration,3015) +2025-10-29 10:31:44 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration org.hibernate.type.OffsetDateTimeType -> basicType@2(java.time.OffsetDateTime,3003) +2025-10-29 10:31:44 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration OffsetDateTime -> basicType@2(java.time.OffsetDateTime,3003) +2025-10-29 10:31:44 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.OffsetDateTime -> basicType@2(java.time.OffsetDateTime,3003) +2025-10-29 10:31:44 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration org.hibernate.type.ZonedDateTimeType -> basicType@3(java.time.ZonedDateTime,3003) +2025-10-29 10:31:44 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration ZonedDateTime -> basicType@3(java.time.ZonedDateTime,3003) +2025-10-29 10:31:44 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.ZonedDateTime -> basicType@3(java.time.ZonedDateTime,3003) +2025-10-29 10:31:44 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration org.hibernate.type.OffsetTimeType -> basicType@4(java.time.OffsetTime,3007) +2025-10-29 10:31:44 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration OffsetTime -> basicType@4(java.time.OffsetTime,3007) +2025-10-29 10:31:44 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.OffsetTime -> basicType@4(java.time.OffsetTime,3007) +2025-10-29 10:31:44 [main] DEBUG o.h.type.spi.TypeConfiguration$Scope - Scoping TypeConfiguration [org.hibernate.type.spi.TypeConfiguration@333efb51] to MetadataBuildingContext [org.hibernate.boot.internal.MetadataBuildingContextRootImpl@2c451c4a] +2025-10-29 10:31: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 10:31:44 [main] DEBUG o.h.type.spi.TypeConfiguration$Scope - Scoping TypeConfiguration [org.hibernate.type.spi.TypeConfiguration@333efb51] to SessionFactoryImplementor [org.hibernate.internal.SessionFactoryImpl@4b8466c2] +2025-10-29 10:31:44 [main] INFO com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Starting... +2025-10-29 10:31:45 [main] WARN o.h.e.jdbc.spi.SqlExceptionHelper - SQL Error: 0, SQLState: 08001 +2025-10-29 10:31:45 [main] ERROR o.h.e.jdbc.spi.SqlExceptionHelper - Connection to localhost:5432 refused. Check that the hostname and port are correct and that the postmaster is accepting TCP/IP connections. +2025-10-29 10:31:45 [main] TRACE o.h.type.spi.TypeConfiguration$Scope - Handling #sessionFactoryClosed from [org.hibernate.internal.SessionFactoryImpl@4b8466c2] for TypeConfiguration +2025-10-29 10:31:45 [main] DEBUG o.h.type.spi.TypeConfiguration$Scope - Un-scoping TypeConfiguration [org.hibernate.type.spi.TypeConfiguration$Scope@8d5b303] from SessionFactory [org.hibernate.internal.SessionFactoryImpl@4b8466c2] +2025-10-29 10:31:45 [main] ERROR o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: [PersistenceUnit: default] Unable to build Hibernate SessionFactory; nested exception is org.hibernate.exception.JDBCConnectionException: Unable to open JDBC Connection for DDL execution [Connection to localhost:5432 refused. Check that the hostname and port are correct and that the postmaster is accepting TCP/IP connections.] [n/a] +2025-10-29 10:31:45 [main] WARN o.s.b.w.s.c.AnnotationConfigServletWebServerApplicationContext - Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: [PersistenceUnit: default] Unable to build Hibernate SessionFactory; nested exception is org.hibernate.exception.JDBCConnectionException: Unable to open JDBC Connection for DDL execution [Connection to localhost:5432 refused. Check that the hostname and port are correct and that the postmaster is accepting TCP/IP connections.] [n/a] +2025-10-29 10:31:45 [main] INFO o.a.catalina.core.StandardService - Stopping service [Tomcat] +2025-10-29 10:31:45 [main] INFO o.s.b.a.l.ConditionEvaluationReportLogger - + +Error starting ApplicationContext. To display the condition evaluation report re-run your application with 'debug' enabled. +2025-10-29 10:31:45 [main] ERROR o.s.boot.SpringApplication - Application run failed +org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: [PersistenceUnit: default] Unable to build Hibernate SessionFactory; nested exception is org.hibernate.exception.JDBCConnectionException: Unable to open JDBC Connection for DDL execution [Connection to localhost:5432 refused. Check that the hostname and port are correct and that the postmaster is accepting TCP/IP connections.] [n/a] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1806) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:600) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:522) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:337) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:335) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:205) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:954) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:625) + at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:146) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:754) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:456) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:335) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:1363) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:1352) + at com.unicorn.hgzero.stt.SttApplication.main(SttApplication.java:29) +Caused by: jakarta.persistence.PersistenceException: [PersistenceUnit: default] Unable to build Hibernate SessionFactory; nested exception is org.hibernate.exception.JDBCConnectionException: Unable to open JDBC Connection for DDL execution [Connection to localhost:5432 refused. Check that the hostname and port are correct and that the postmaster is accepting TCP/IP connections.] [n/a] + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:421) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:366) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1853) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1802) + ... 15 common frames omitted +Caused by: org.hibernate.exception.JDBCConnectionException: Unable to open JDBC Connection for DDL execution [Connection to localhost:5432 refused. Check that the hostname and port are correct and that the postmaster is accepting TCP/IP connections.] [n/a] + at org.hibernate.exception.internal.SQLStateConversionDelegate.convert(SQLStateConversionDelegate.java:100) + 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.resource.transaction.backend.jdbc.internal.DdlTransactionIsolatorNonJtaImpl.getIsolatedConnection(DdlTransactionIsolatorNonJtaImpl.java:74) + at org.hibernate.resource.transaction.backend.jdbc.internal.DdlTransactionIsolatorNonJtaImpl.getIsolatedConnection(DdlTransactionIsolatorNonJtaImpl.java:39) + at org.hibernate.tool.schema.internal.exec.ImprovedExtractionContextImpl.getJdbcConnection(ImprovedExtractionContextImpl.java:63) + at org.hibernate.tool.schema.extract.spi.ExtractionContext.getQueryResults(ExtractionContext.java:43) + at org.hibernate.tool.schema.extract.internal.SequenceInformationExtractorLegacyImpl.extractMetadata(SequenceInformationExtractorLegacyImpl.java:39) + at org.hibernate.tool.schema.extract.internal.DatabaseInformationImpl.initializeSequences(DatabaseInformationImpl.java:66) + at org.hibernate.tool.schema.extract.internal.DatabaseInformationImpl.(DatabaseInformationImpl.java:60) + at org.hibernate.tool.schema.internal.Helper.buildDatabaseInformation(Helper.java:185) + at org.hibernate.tool.schema.internal.AbstractSchemaMigrator.doMigration(AbstractSchemaMigrator.java:100) + at org.hibernate.tool.schema.spi.SchemaManagementToolCoordinator.performDatabaseAction(SchemaManagementToolCoordinator.java:280) + at org.hibernate.tool.schema.spi.SchemaManagementToolCoordinator.lambda$process$5(SchemaManagementToolCoordinator.java:144) + at java.base/java.util.HashMap.forEach(HashMap.java:1430) + at org.hibernate.tool.schema.spi.SchemaManagementToolCoordinator.process(SchemaManagementToolCoordinator.java:141) + at org.hibernate.boot.internal.SessionFactoryObserverForSchemaExport.sessionFactoryCreated(SessionFactoryObserverForSchemaExport.java:37) + at org.hibernate.internal.SessionFactoryObserverChain.sessionFactoryCreated(SessionFactoryObserverChain.java:35) + at org.hibernate.internal.SessionFactoryImpl.(SessionFactoryImpl.java:322) + at org.hibernate.boot.internal.SessionFactoryBuilderImpl.build(SessionFactoryBuilderImpl.java:457) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1506) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:75) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:390) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + ... 19 common frames omitted +Caused by: org.postgresql.util.PSQLException: Connection to localhost:5432 refused. Check that the hostname and port are correct and that the postmaster is accepting TCP/IP connections. + at org.postgresql.core.v3.ConnectionFactoryImpl.openConnectionImpl(ConnectionFactoryImpl.java:352) + at org.postgresql.core.ConnectionFactory.openConnection(ConnectionFactory.java:54) + at org.postgresql.jdbc.PgConnection.(PgConnection.java:273) + at org.postgresql.Driver.makeConnection(Driver.java:446) + at org.postgresql.Driver.connect(Driver.java:298) + at com.zaxxer.hikari.util.DriverDataSource.getConnection(DriverDataSource.java:137) + at com.zaxxer.hikari.pool.PoolBase.newConnection(PoolBase.java:360) + at com.zaxxer.hikari.pool.PoolBase.newPoolEntry(PoolBase.java:202) + at com.zaxxer.hikari.pool.HikariPool.createPoolEntry(HikariPool.java:461) + at com.zaxxer.hikari.pool.HikariPool.checkFailFast(HikariPool.java:550) + at com.zaxxer.hikari.pool.HikariPool.(HikariPool.java:98) + at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:111) + at org.hibernate.engine.jdbc.connections.internal.DatasourceConnectionProviderImpl.getConnection(DatasourceConnectionProviderImpl.java:122) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator$ConnectionProviderJdbcConnectionAccess.obtainConnection(JdbcEnvironmentInitiator.java:439) + at org.hibernate.resource.transaction.backend.jdbc.internal.DdlTransactionIsolatorNonJtaImpl.getIsolatedConnection(DdlTransactionIsolatorNonJtaImpl.java:46) + ... 39 common frames omitted +Caused by: java.net.ConnectException: Connection refused + at java.base/sun.nio.ch.Net.pollConnect(Native Method) + at java.base/sun.nio.ch.Net.pollConnectNow(Net.java:682) + at java.base/sun.nio.ch.NioSocketImpl.timedFinishConnect(NioSocketImpl.java:549) + at java.base/sun.nio.ch.NioSocketImpl.connect(NioSocketImpl.java:592) + at java.base/java.net.SocksSocketImpl.connect(SocksSocketImpl.java:327) + at java.base/java.net.Socket.connect(Socket.java:760) + at org.postgresql.core.PGStream.createSocket(PGStream.java:260) + at org.postgresql.core.PGStream.(PGStream.java:121) + at org.postgresql.core.v3.ConnectionFactoryImpl.tryConnect(ConnectionFactoryImpl.java:140) + at org.postgresql.core.v3.ConnectionFactoryImpl.openConnectionImpl(ConnectionFactoryImpl.java:268) + ... 53 common frames omitted +2025-10-29 10:33:19 [main] INFO c.unicorn.hgzero.stt.SttApplication - Starting SttApplication using Java 23.0.2 with PID 52713 (/Users/jominseo/HGZero/stt/build/classes/java/main started by jominseo in /Users/jominseo/HGZero/stt) +2025-10-29 10:33:19 [main] DEBUG c.unicorn.hgzero.stt.SttApplication - Running with Spring Boot v3.3.5, Spring v6.1.14 +2025-10-29 10:33:19 [main] INFO c.unicorn.hgzero.stt.SttApplication - No active profile set, falling back to 1 default profile: "default" +2025-10-29 10:33:19 [main] INFO o.s.d.r.c.RepositoryConfigurationDelegate - Multiple Spring Data modules found, entering strict repository configuration mode +2025-10-29 10:33:19 [main] INFO o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data JPA repositories in DEFAULT mode. +2025-10-29 10:33:19 [main] INFO o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 43 ms. Found 3 JPA repository interfaces. +2025-10-29 10:33:20 [main] INFO o.s.d.r.c.RepositoryConfigurationDelegate - Multiple Spring Data modules found, entering strict repository configuration mode +2025-10-29 10:33:20 [main] INFO o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data Redis repositories in DEFAULT mode. +2025-10-29 10:33:20 [main] INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.unicorn.hgzero.stt.repository.jpa.RecordingRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-10-29 10:33:20 [main] INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.unicorn.hgzero.stt.repository.jpa.TranscriptSegmentRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-10-29 10:33:20 [main] INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.unicorn.hgzero.stt.repository.jpa.TranscriptionRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-10-29 10:33:20 [main] INFO o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 5 ms. Found 0 Redis repository interfaces. +2025-10-29 10:33:20 [main] INFO o.s.b.w.e.tomcat.TomcatWebServer - Tomcat initialized with port 8084 (http) +2025-10-29 10:33:20 [main] INFO o.a.catalina.core.StandardService - Starting service [Tomcat] +2025-10-29 10:33:20 [main] INFO o.a.catalina.core.StandardEngine - Starting Servlet engine: [Apache Tomcat/10.1.31] +2025-10-29 10:33:20 [main] INFO o.a.c.c.C.[Tomcat].[localhost].[/] - Initializing Spring embedded WebApplicationContext +2025-10-29 10:33:20 [main] INFO o.s.b.w.s.c.ServletWebServerApplicationContext - Root WebApplicationContext: initialization completed in 712 ms +2025-10-29 10:33:20 [main] INFO o.h.jpa.internal.util.LogHelper - HHH000204: Processing PersistenceUnitInfo [name: default] +2025-10-29 10:33:20 [main] INFO org.hibernate.Version - HHH000412: Hibernate ORM core version 6.5.3.Final +2025-10-29 10:33:20 [main] INFO o.h.c.i.RegionFactoryInitiator - HHH000026: Second-level cache disabled +2025-10-29 10:33:20 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration boolean -> org.hibernate.type.BasicTypeReference@29ea5e0 +2025-10-29 10:33:20 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration boolean -> org.hibernate.type.BasicTypeReference@29ea5e0 +2025-10-29 10:33:20 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Boolean -> org.hibernate.type.BasicTypeReference@29ea5e0 +2025-10-29 10:33:20 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration numeric_boolean -> org.hibernate.type.BasicTypeReference@1c459c28 +2025-10-29 10:33:20 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration org.hibernate.type.NumericBooleanConverter -> org.hibernate.type.BasicTypeReference@1c459c28 +2025-10-29 10:33:20 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration true_false -> org.hibernate.type.BasicTypeReference@6ffdbeef +2025-10-29 10:33:20 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration org.hibernate.type.TrueFalseConverter -> org.hibernate.type.BasicTypeReference@6ffdbeef +2025-10-29 10:33:20 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration yes_no -> org.hibernate.type.BasicTypeReference@4a3509b0 +2025-10-29 10:33:20 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration org.hibernate.type.YesNoConverter -> org.hibernate.type.BasicTypeReference@4a3509b0 +2025-10-29 10:33:20 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration byte -> org.hibernate.type.BasicTypeReference@3d7314b3 +2025-10-29 10:33:20 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration byte -> org.hibernate.type.BasicTypeReference@3d7314b3 +2025-10-29 10:33:20 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Byte -> org.hibernate.type.BasicTypeReference@3d7314b3 +2025-10-29 10:33:20 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration binary -> org.hibernate.type.BasicTypeReference@d677be9 +2025-10-29 10:33:20 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration byte[] -> org.hibernate.type.BasicTypeReference@d677be9 +2025-10-29 10:33:20 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration [B -> org.hibernate.type.BasicTypeReference@d677be9 +2025-10-29 10:33:20 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration binary_wrapper -> org.hibernate.type.BasicTypeReference@fefb66c +2025-10-29 10:33:20 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration wrapper-binary -> org.hibernate.type.BasicTypeReference@fefb66c +2025-10-29 10:33:20 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration image -> org.hibernate.type.BasicTypeReference@6d7556a8 +2025-10-29 10:33:20 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration blob -> org.hibernate.type.BasicTypeReference@48860139 +2025-10-29 10:33:20 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.sql.Blob -> org.hibernate.type.BasicTypeReference@48860139 +2025-10-29 10:33:20 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration materialized_blob -> org.hibernate.type.BasicTypeReference@7e0883f3 +2025-10-29 10:33:20 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration materialized_blob_wrapper -> org.hibernate.type.BasicTypeReference@ca60688 +2025-10-29 10:33:20 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration short -> org.hibernate.type.BasicTypeReference@4ba1c1a2 +2025-10-29 10:33:20 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration short -> org.hibernate.type.BasicTypeReference@4ba1c1a2 +2025-10-29 10:33:20 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Short -> org.hibernate.type.BasicTypeReference@4ba1c1a2 +2025-10-29 10:33:20 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration integer -> org.hibernate.type.BasicTypeReference@33568e26 +2025-10-29 10:33:20 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration int -> org.hibernate.type.BasicTypeReference@33568e26 +2025-10-29 10:33:20 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Integer -> org.hibernate.type.BasicTypeReference@33568e26 +2025-10-29 10:33:20 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration long -> org.hibernate.type.BasicTypeReference@97b84a4 +2025-10-29 10:33:20 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration long -> org.hibernate.type.BasicTypeReference@97b84a4 +2025-10-29 10:33:20 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Long -> org.hibernate.type.BasicTypeReference@97b84a4 +2025-10-29 10:33:20 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration float -> org.hibernate.type.BasicTypeReference@35555145 +2025-10-29 10:33:20 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration float -> org.hibernate.type.BasicTypeReference@35555145 +2025-10-29 10:33:20 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Float -> org.hibernate.type.BasicTypeReference@35555145 +2025-10-29 10:33:20 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration double -> org.hibernate.type.BasicTypeReference@70bc3a9c +2025-10-29 10:33:20 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration double -> org.hibernate.type.BasicTypeReference@70bc3a9c +2025-10-29 10:33:20 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Double -> org.hibernate.type.BasicTypeReference@70bc3a9c +2025-10-29 10:33:20 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration big_integer -> org.hibernate.type.BasicTypeReference@771cbd13 +2025-10-29 10:33:20 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.math.BigInteger -> org.hibernate.type.BasicTypeReference@771cbd13 +2025-10-29 10:33:20 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration big_decimal -> org.hibernate.type.BasicTypeReference@229749f0 +2025-10-29 10:33:20 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.math.BigDecimal -> org.hibernate.type.BasicTypeReference@229749f0 +2025-10-29 10:33:20 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration character -> org.hibernate.type.BasicTypeReference@3d57fb9e +2025-10-29 10:33:20 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration char -> org.hibernate.type.BasicTypeReference@3d57fb9e +2025-10-29 10:33:20 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Character -> org.hibernate.type.BasicTypeReference@3d57fb9e +2025-10-29 10:33:20 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration character_nchar -> org.hibernate.type.BasicTypeReference@2c2e5e72 +2025-10-29 10:33:20 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration string -> org.hibernate.type.BasicTypeReference@3e489ac1 +2025-10-29 10:33:20 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.String -> org.hibernate.type.BasicTypeReference@3e489ac1 +2025-10-29 10:33:20 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration nstring -> org.hibernate.type.BasicTypeReference@26888c31 +2025-10-29 10:33:20 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration characters -> org.hibernate.type.BasicTypeReference@24010875 +2025-10-29 10:33:20 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration char[] -> org.hibernate.type.BasicTypeReference@24010875 +2025-10-29 10:33:20 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration [C -> org.hibernate.type.BasicTypeReference@24010875 +2025-10-29 10:33:20 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration wrapper-characters -> org.hibernate.type.BasicTypeReference@7a021f49 +2025-10-29 10:33:20 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration text -> org.hibernate.type.BasicTypeReference@e60c5a +2025-10-29 10:33:20 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration ntext -> org.hibernate.type.BasicTypeReference@626df173 +2025-10-29 10:33:20 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration clob -> org.hibernate.type.BasicTypeReference@4e030feb +2025-10-29 10:33:20 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.sql.Clob -> org.hibernate.type.BasicTypeReference@4e030feb +2025-10-29 10:33:20 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration nclob -> org.hibernate.type.BasicTypeReference@2411b935 +2025-10-29 10:33:20 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.sql.NClob -> org.hibernate.type.BasicTypeReference@2411b935 +2025-10-29 10:33:20 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration materialized_clob -> org.hibernate.type.BasicTypeReference@1425e531 +2025-10-29 10:33:20 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration materialized_clob_char_array -> org.hibernate.type.BasicTypeReference@194e78af +2025-10-29 10:33:20 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration materialized_clob_character_array -> org.hibernate.type.BasicTypeReference@4fe4503a +2025-10-29 10:33:20 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration materialized_nclob -> org.hibernate.type.BasicTypeReference@669580e2 +2025-10-29 10:33:20 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration materialized_nclob_character_array -> org.hibernate.type.BasicTypeReference@5d22ed6c +2025-10-29 10:33:20 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration materialized_nclob_char_array -> org.hibernate.type.BasicTypeReference@37c37d67 +2025-10-29 10:33:20 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration Duration -> org.hibernate.type.BasicTypeReference@5a4b8e25 +2025-10-29 10:33:20 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.Duration -> org.hibernate.type.BasicTypeReference@5a4b8e25 +2025-10-29 10:33:20 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration LocalDateTime -> org.hibernate.type.BasicTypeReference@1013871e +2025-10-29 10:33:20 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.LocalDateTime -> org.hibernate.type.BasicTypeReference@1013871e +2025-10-29 10:33:20 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration LocalDate -> org.hibernate.type.BasicTypeReference@5a9051fd +2025-10-29 10:33:20 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.LocalDate -> org.hibernate.type.BasicTypeReference@5a9051fd +2025-10-29 10:33:20 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration LocalTime -> org.hibernate.type.BasicTypeReference@7614378d +2025-10-29 10:33:20 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.LocalTime -> org.hibernate.type.BasicTypeReference@7614378d +2025-10-29 10:33:20 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration OffsetDateTime -> org.hibernate.type.BasicTypeReference@7028b5cc +2025-10-29 10:33:20 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.OffsetDateTime -> org.hibernate.type.BasicTypeReference@7028b5cc +2025-10-29 10:33:20 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration OffsetDateTimeWithTimezone -> org.hibernate.type.BasicTypeReference@7c0ff7a0 +2025-10-29 10:33:20 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration OffsetDateTimeWithoutTimezone -> org.hibernate.type.BasicTypeReference@24c84e65 +2025-10-29 10:33:20 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration OffsetTime -> org.hibernate.type.BasicTypeReference@7337bd2e +2025-10-29 10:33:20 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.OffsetTime -> org.hibernate.type.BasicTypeReference@7337bd2e +2025-10-29 10:33:20 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration OffsetTimeUtc -> org.hibernate.type.BasicTypeReference@4604e051 +2025-10-29 10:33:20 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration OffsetTimeWithTimezone -> org.hibernate.type.BasicTypeReference@4535bdc6 +2025-10-29 10:33:20 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration OffsetTimeWithoutTimezone -> org.hibernate.type.BasicTypeReference@23e86863 +2025-10-29 10:33:20 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration ZonedDateTime -> org.hibernate.type.BasicTypeReference@6df87ffd +2025-10-29 10:33:20 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.ZonedDateTime -> org.hibernate.type.BasicTypeReference@6df87ffd +2025-10-29 10:33:20 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration ZonedDateTimeWithTimezone -> org.hibernate.type.BasicTypeReference@c1f0c7b +2025-10-29 10:33:20 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration ZonedDateTimeWithoutTimezone -> org.hibernate.type.BasicTypeReference@642c5bb3 +2025-10-29 10:33:20 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration date -> org.hibernate.type.BasicTypeReference@4e79c25 +2025-10-29 10:33:20 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.sql.Date -> org.hibernate.type.BasicTypeReference@4e79c25 +2025-10-29 10:33:20 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration time -> org.hibernate.type.BasicTypeReference@2ace1cd3 +2025-10-29 10:33:20 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.sql.Time -> org.hibernate.type.BasicTypeReference@2ace1cd3 +2025-10-29 10:33:20 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration timestamp -> org.hibernate.type.BasicTypeReference@5e46a125 +2025-10-29 10:33:20 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.sql.Timestamp -> org.hibernate.type.BasicTypeReference@5e46a125 +2025-10-29 10:33:20 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.util.Date -> org.hibernate.type.BasicTypeReference@5e46a125 +2025-10-29 10:33:20 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration calendar -> org.hibernate.type.BasicTypeReference@5831989d +2025-10-29 10:33:20 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.util.Calendar -> org.hibernate.type.BasicTypeReference@5831989d +2025-10-29 10:33:20 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.util.GregorianCalendar -> org.hibernate.type.BasicTypeReference@5831989d +2025-10-29 10:33:20 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration calendar_date -> org.hibernate.type.BasicTypeReference@608f310a +2025-10-29 10:33:20 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration calendar_time -> org.hibernate.type.BasicTypeReference@3a7d914c +2025-10-29 10:33:20 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration instant -> org.hibernate.type.BasicTypeReference@515940af +2025-10-29 10:33:20 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.Instant -> org.hibernate.type.BasicTypeReference@515940af +2025-10-29 10:33:20 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration uuid -> org.hibernate.type.BasicTypeReference@5f8df69 +2025-10-29 10:33:20 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.util.UUID -> org.hibernate.type.BasicTypeReference@5f8df69 +2025-10-29 10:33:20 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration pg-uuid -> org.hibernate.type.BasicTypeReference@5f8df69 +2025-10-29 10:33:20 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration uuid-binary -> org.hibernate.type.BasicTypeReference@1ce6a9bd +2025-10-29 10:33:20 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration uuid-char -> org.hibernate.type.BasicTypeReference@4a47bc9c +2025-10-29 10:33:20 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration class -> org.hibernate.type.BasicTypeReference@5100c143 +2025-10-29 10:33:20 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Class -> org.hibernate.type.BasicTypeReference@5100c143 +2025-10-29 10:33:20 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration currency -> org.hibernate.type.BasicTypeReference@12404f9d +2025-10-29 10:33:20 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration Currency -> org.hibernate.type.BasicTypeReference@12404f9d +2025-10-29 10:33:20 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.util.Currency -> org.hibernate.type.BasicTypeReference@12404f9d +2025-10-29 10:33:20 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration locale -> org.hibernate.type.BasicTypeReference@3b42b729 +2025-10-29 10:33:20 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.util.Locale -> org.hibernate.type.BasicTypeReference@3b42b729 +2025-10-29 10:33:20 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration serializable -> org.hibernate.type.BasicTypeReference@4c164f81 +2025-10-29 10:33:20 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.io.Serializable -> org.hibernate.type.BasicTypeReference@4c164f81 +2025-10-29 10:33:20 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration timezone -> org.hibernate.type.BasicTypeReference@1bcb8599 +2025-10-29 10:33:20 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.util.TimeZone -> org.hibernate.type.BasicTypeReference@1bcb8599 +2025-10-29 10:33:20 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration ZoneOffset -> org.hibernate.type.BasicTypeReference@b671dda +2025-10-29 10:33:20 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.ZoneOffset -> org.hibernate.type.BasicTypeReference@b671dda +2025-10-29 10:33:20 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration url -> org.hibernate.type.BasicTypeReference@25b20860 +2025-10-29 10:33:20 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.net.URL -> org.hibernate.type.BasicTypeReference@25b20860 +2025-10-29 10:33:20 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration vector -> org.hibernate.type.BasicTypeReference@5ba63110 +2025-10-29 10:33:20 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration row_version -> org.hibernate.type.BasicTypeReference@1c0680b0 +2025-10-29 10:33:20 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration object -> org.hibernate.type.JavaObjectType@5b55c3d6 +2025-10-29 10:33:20 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Object -> org.hibernate.type.JavaObjectType@5b55c3d6 +2025-10-29 10:33:20 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration null -> org.hibernate.type.NullType@24b38e8f +2025-10-29 10:33:20 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration imm_date -> org.hibernate.type.BasicTypeReference@5cf072ea +2025-10-29 10:33:20 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration imm_time -> org.hibernate.type.BasicTypeReference@7641ed02 +2025-10-29 10:33:20 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration imm_timestamp -> org.hibernate.type.BasicTypeReference@4ebed2b3 +2025-10-29 10:33:20 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration imm_calendar -> org.hibernate.type.BasicTypeReference@11069eac +2025-10-29 10:33:20 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration imm_calendar_date -> org.hibernate.type.BasicTypeReference@5909285b +2025-10-29 10:33:20 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration imm_calendar_time -> org.hibernate.type.BasicTypeReference@2059f785 +2025-10-29 10:33:20 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration imm_binary -> org.hibernate.type.BasicTypeReference@18ca9277 +2025-10-29 10:33:20 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration imm_serializable -> org.hibernate.type.BasicTypeReference@3d9c8c3c +2025-10-29 10:33:20 [main] INFO o.s.o.j.p.SpringPersistenceUnitInfo - No LoadTimeWeaver setup: ignoring JPA class transformer +2025-10-29 10:33:20 [main] INFO com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Starting... +2025-10-29 10:33:21 [main] WARN o.h.e.jdbc.spi.SqlExceptionHelper - SQL Error: 0, SQLState: 08001 +2025-10-29 10:33:21 [main] ERROR o.h.e.jdbc.spi.SqlExceptionHelper - Connection to localhost:5432 refused. Check that the hostname and port are correct and that the postmaster is accepting TCP/IP connections. +2025-10-29 10:33:21 [main] WARN o.h.e.j.e.i.JdbcEnvironmentInitiator - HHH000342: Could not obtain connection to query metadata +org.hibernate.exception.JDBCConnectionException: unable to obtain isolated JDBC connection [Connection to localhost:5432 refused. Check that the hostname and port are correct and that the postmaster is accepting TCP/IP connections.] [n/a] + at org.hibernate.exception.internal.SQLStateConversionDelegate.convert(SQLStateConversionDelegate.java:100) + 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.resource.transaction.backend.jdbc.internal.JdbcIsolationDelegate.delegateWork(JdbcIsolationDelegate.java:116) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.getJdbcEnvironmentUsingJdbcMetadata(JdbcEnvironmentInitiator.java:292) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:124) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:78) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:130) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:263) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:238) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:215) + at org.hibernate.boot.model.relational.Database.(Database.java:45) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:221) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:189) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:171) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1431) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1502) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:75) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:390) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:366) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1853) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1802) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:600) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:522) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:337) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:335) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:205) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:954) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:625) + at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:146) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:754) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:456) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:335) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:1363) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:1352) + at com.unicorn.hgzero.stt.SttApplication.main(SttApplication.java:29) +Caused by: org.postgresql.util.PSQLException: Connection to localhost:5432 refused. Check that the hostname and port are correct and that the postmaster is accepting TCP/IP connections. + at org.postgresql.core.v3.ConnectionFactoryImpl.openConnectionImpl(ConnectionFactoryImpl.java:352) + at org.postgresql.core.ConnectionFactory.openConnection(ConnectionFactory.java:54) + at org.postgresql.jdbc.PgConnection.(PgConnection.java:273) + at org.postgresql.Driver.makeConnection(Driver.java:446) + at org.postgresql.Driver.connect(Driver.java:298) + at com.zaxxer.hikari.util.DriverDataSource.getConnection(DriverDataSource.java:137) + at com.zaxxer.hikari.pool.PoolBase.newConnection(PoolBase.java:360) + at com.zaxxer.hikari.pool.PoolBase.newPoolEntry(PoolBase.java:202) + at com.zaxxer.hikari.pool.HikariPool.createPoolEntry(HikariPool.java:461) + at com.zaxxer.hikari.pool.HikariPool.checkFailFast(HikariPool.java:550) + at com.zaxxer.hikari.pool.HikariPool.(HikariPool.java:98) + at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:111) + at org.hibernate.engine.jdbc.connections.internal.DatasourceConnectionProviderImpl.getConnection(DatasourceConnectionProviderImpl.java:122) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator$ConnectionProviderJdbcConnectionAccess.obtainConnection(JdbcEnvironmentInitiator.java:439) + at org.hibernate.resource.transaction.backend.jdbc.internal.JdbcIsolationDelegate.delegateWork(JdbcIsolationDelegate.java:61) + ... 35 common frames omitted +Caused by: java.net.ConnectException: Connection refused + at java.base/sun.nio.ch.Net.pollConnect(Native Method) + at java.base/sun.nio.ch.Net.pollConnectNow(Net.java:682) + at java.base/sun.nio.ch.NioSocketImpl.timedFinishConnect(NioSocketImpl.java:542) + at java.base/sun.nio.ch.NioSocketImpl.connect(NioSocketImpl.java:592) + at java.base/java.net.SocksSocketImpl.connect(SocksSocketImpl.java:327) + at java.base/java.net.Socket.connect(Socket.java:760) + at org.postgresql.core.PGStream.createSocket(PGStream.java:260) + at org.postgresql.core.PGStream.(PGStream.java:121) + at org.postgresql.core.v3.ConnectionFactoryImpl.tryConnect(ConnectionFactoryImpl.java:140) + at org.postgresql.core.v3.ConnectionFactoryImpl.openConnectionImpl(ConnectionFactoryImpl.java:268) + ... 49 common frames omitted +2025-10-29 10:33:21 [main] WARN org.hibernate.orm.deprecation - HHH90000025: PostgreSQLDialect does not need to be specified explicitly using 'hibernate.dialect' (remove the property setting and it will be selected by default) +2025-10-29 10:33:21 [main] DEBUG o.h.t.d.sql.spi.DdlTypeRegistry - addDescriptor(2003, org.hibernate.type.descriptor.sql.internal.ArrayDdlTypeImpl@169d1f92) replaced previous registration(org.hibernate.type.descriptor.sql.internal.ArrayDdlTypeImpl@7fcbc336) +2025-10-29 10:33:21 [main] DEBUG o.h.t.d.sql.spi.DdlTypeRegistry - addDescriptor(6, org.hibernate.type.descriptor.sql.internal.CapacityDependentDdlType@1fe7fa16) replaced previous registration(org.hibernate.type.descriptor.sql.internal.DdlTypeImpl@61503d00) +2025-10-29 10:33:21 [main] DEBUG o.h.t.d.jdbc.spi.JdbcTypeRegistry - addDescriptor(2004, BlobTypeDescriptor(BLOB_BINDING)) replaced previous registration(BlobTypeDescriptor(DEFAULT)) +2025-10-29 10:33:21 [main] DEBUG o.h.t.d.jdbc.spi.JdbcTypeRegistry - addDescriptor(2005, ClobTypeDescriptor(CLOB_BINDING)) replaced previous registration(ClobTypeDescriptor(DEFAULT)) +2025-10-29 10:33:21 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration JAVA_OBJECT -> org.hibernate.type.JavaObjectType@3d2b13f +2025-10-29 10:33:21 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Object -> org.hibernate.type.JavaObjectType@3d2b13f +2025-10-29 10:33:21 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Type registration key [java.lang.Object] overrode previous entry : `org.hibernate.type.JavaObjectType@5b55c3d6` +2025-10-29 10:33:21 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration org.hibernate.type.DurationType -> basicType@1(java.time.Duration,3015) +2025-10-29 10:33:21 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration Duration -> basicType@1(java.time.Duration,3015) +2025-10-29 10:33:21 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.Duration -> basicType@1(java.time.Duration,3015) +2025-10-29 10:33:21 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration org.hibernate.type.OffsetDateTimeType -> basicType@2(java.time.OffsetDateTime,3003) +2025-10-29 10:33:21 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration OffsetDateTime -> basicType@2(java.time.OffsetDateTime,3003) +2025-10-29 10:33:21 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.OffsetDateTime -> basicType@2(java.time.OffsetDateTime,3003) +2025-10-29 10:33:21 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration org.hibernate.type.ZonedDateTimeType -> basicType@3(java.time.ZonedDateTime,3003) +2025-10-29 10:33:21 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration ZonedDateTime -> basicType@3(java.time.ZonedDateTime,3003) +2025-10-29 10:33:21 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.ZonedDateTime -> basicType@3(java.time.ZonedDateTime,3003) +2025-10-29 10:33:21 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration org.hibernate.type.OffsetTimeType -> basicType@4(java.time.OffsetTime,3007) +2025-10-29 10:33:21 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration OffsetTime -> basicType@4(java.time.OffsetTime,3007) +2025-10-29 10:33:21 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.OffsetTime -> basicType@4(java.time.OffsetTime,3007) +2025-10-29 10:33:21 [main] DEBUG o.h.type.spi.TypeConfiguration$Scope - Scoping TypeConfiguration [org.hibernate.type.spi.TypeConfiguration@6f87a7c7] to MetadataBuildingContext [org.hibernate.boot.internal.MetadataBuildingContextRootImpl@857f1a7] +2025-10-29 10:33:21 [main] INFO o.h.e.t.j.p.i.JtaPlatformInitiator - HHH000489: No JTA platform available (set 'hibernate.transaction.jta.platform' to enable JTA platform integration) +2025-10-29 10:33:21 [main] DEBUG o.h.type.spi.TypeConfiguration$Scope - Scoping TypeConfiguration [org.hibernate.type.spi.TypeConfiguration@6f87a7c7] to SessionFactoryImplementor [org.hibernate.internal.SessionFactoryImpl@69b436a7] +2025-10-29 10:33:21 [main] INFO com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Starting... +2025-10-29 10:33:22 [main] WARN o.h.e.jdbc.spi.SqlExceptionHelper - SQL Error: 0, SQLState: 08001 +2025-10-29 10:33:22 [main] ERROR o.h.e.jdbc.spi.SqlExceptionHelper - Connection to localhost:5432 refused. Check that the hostname and port are correct and that the postmaster is accepting TCP/IP connections. +2025-10-29 10:33:22 [main] TRACE o.h.type.spi.TypeConfiguration$Scope - Handling #sessionFactoryClosed from [org.hibernate.internal.SessionFactoryImpl@69b436a7] for TypeConfiguration +2025-10-29 10:33:22 [main] DEBUG o.h.type.spi.TypeConfiguration$Scope - Un-scoping TypeConfiguration [org.hibernate.type.spi.TypeConfiguration$Scope@53c0424a] from SessionFactory [org.hibernate.internal.SessionFactoryImpl@69b436a7] +2025-10-29 10:33:22 [main] ERROR o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: [PersistenceUnit: default] Unable to build Hibernate SessionFactory; nested exception is org.hibernate.exception.JDBCConnectionException: Unable to open JDBC Connection for DDL execution [Connection to localhost:5432 refused. Check that the hostname and port are correct and that the postmaster is accepting TCP/IP connections.] [n/a] +2025-10-29 10:33:22 [main] WARN o.s.b.w.s.c.AnnotationConfigServletWebServerApplicationContext - Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: [PersistenceUnit: default] Unable to build Hibernate SessionFactory; nested exception is org.hibernate.exception.JDBCConnectionException: Unable to open JDBC Connection for DDL execution [Connection to localhost:5432 refused. Check that the hostname and port are correct and that the postmaster is accepting TCP/IP connections.] [n/a] +2025-10-29 10:33:22 [main] INFO o.a.catalina.core.StandardService - Stopping service [Tomcat] +2025-10-29 10:33:22 [main] INFO o.s.b.a.l.ConditionEvaluationReportLogger - + +Error starting ApplicationContext. To display the condition evaluation report re-run your application with 'debug' enabled. +2025-10-29 10:33:23 [main] ERROR o.s.boot.SpringApplication - Application run failed +org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: [PersistenceUnit: default] Unable to build Hibernate SessionFactory; nested exception is org.hibernate.exception.JDBCConnectionException: Unable to open JDBC Connection for DDL execution [Connection to localhost:5432 refused. Check that the hostname and port are correct and that the postmaster is accepting TCP/IP connections.] [n/a] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1806) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:600) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:522) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:337) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:335) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:205) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:954) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:625) + at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:146) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:754) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:456) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:335) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:1363) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:1352) + at com.unicorn.hgzero.stt.SttApplication.main(SttApplication.java:29) +Caused by: jakarta.persistence.PersistenceException: [PersistenceUnit: default] Unable to build Hibernate SessionFactory; nested exception is org.hibernate.exception.JDBCConnectionException: Unable to open JDBC Connection for DDL execution [Connection to localhost:5432 refused. Check that the hostname and port are correct and that the postmaster is accepting TCP/IP connections.] [n/a] + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:421) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:366) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1853) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1802) + ... 15 common frames omitted +Caused by: org.hibernate.exception.JDBCConnectionException: Unable to open JDBC Connection for DDL execution [Connection to localhost:5432 refused. Check that the hostname and port are correct and that the postmaster is accepting TCP/IP connections.] [n/a] + at org.hibernate.exception.internal.SQLStateConversionDelegate.convert(SQLStateConversionDelegate.java:100) + 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.resource.transaction.backend.jdbc.internal.DdlTransactionIsolatorNonJtaImpl.getIsolatedConnection(DdlTransactionIsolatorNonJtaImpl.java:74) + at org.hibernate.resource.transaction.backend.jdbc.internal.DdlTransactionIsolatorNonJtaImpl.getIsolatedConnection(DdlTransactionIsolatorNonJtaImpl.java:39) + at org.hibernate.tool.schema.internal.exec.ImprovedExtractionContextImpl.getJdbcConnection(ImprovedExtractionContextImpl.java:63) + at org.hibernate.tool.schema.extract.spi.ExtractionContext.getQueryResults(ExtractionContext.java:43) + at org.hibernate.tool.schema.extract.internal.SequenceInformationExtractorLegacyImpl.extractMetadata(SequenceInformationExtractorLegacyImpl.java:39) + at org.hibernate.tool.schema.extract.internal.DatabaseInformationImpl.initializeSequences(DatabaseInformationImpl.java:66) + at org.hibernate.tool.schema.extract.internal.DatabaseInformationImpl.(DatabaseInformationImpl.java:60) + at org.hibernate.tool.schema.internal.Helper.buildDatabaseInformation(Helper.java:185) + at org.hibernate.tool.schema.internal.AbstractSchemaMigrator.doMigration(AbstractSchemaMigrator.java:100) + at org.hibernate.tool.schema.spi.SchemaManagementToolCoordinator.performDatabaseAction(SchemaManagementToolCoordinator.java:280) + at org.hibernate.tool.schema.spi.SchemaManagementToolCoordinator.lambda$process$5(SchemaManagementToolCoordinator.java:144) + at java.base/java.util.HashMap.forEach(HashMap.java:1430) + at org.hibernate.tool.schema.spi.SchemaManagementToolCoordinator.process(SchemaManagementToolCoordinator.java:141) + at org.hibernate.boot.internal.SessionFactoryObserverForSchemaExport.sessionFactoryCreated(SessionFactoryObserverForSchemaExport.java:37) + at org.hibernate.internal.SessionFactoryObserverChain.sessionFactoryCreated(SessionFactoryObserverChain.java:35) + at org.hibernate.internal.SessionFactoryImpl.(SessionFactoryImpl.java:322) + at org.hibernate.boot.internal.SessionFactoryBuilderImpl.build(SessionFactoryBuilderImpl.java:457) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1506) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:75) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:390) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + ... 19 common frames omitted +Caused by: org.postgresql.util.PSQLException: Connection to localhost:5432 refused. Check that the hostname and port are correct and that the postmaster is accepting TCP/IP connections. + at org.postgresql.core.v3.ConnectionFactoryImpl.openConnectionImpl(ConnectionFactoryImpl.java:352) + at org.postgresql.core.ConnectionFactory.openConnection(ConnectionFactory.java:54) + at org.postgresql.jdbc.PgConnection.(PgConnection.java:273) + at org.postgresql.Driver.makeConnection(Driver.java:446) + at org.postgresql.Driver.connect(Driver.java:298) + at com.zaxxer.hikari.util.DriverDataSource.getConnection(DriverDataSource.java:137) + at com.zaxxer.hikari.pool.PoolBase.newConnection(PoolBase.java:360) + at com.zaxxer.hikari.pool.PoolBase.newPoolEntry(PoolBase.java:202) + at com.zaxxer.hikari.pool.HikariPool.createPoolEntry(HikariPool.java:461) + at com.zaxxer.hikari.pool.HikariPool.checkFailFast(HikariPool.java:550) + at com.zaxxer.hikari.pool.HikariPool.(HikariPool.java:98) + at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:111) + at org.hibernate.engine.jdbc.connections.internal.DatasourceConnectionProviderImpl.getConnection(DatasourceConnectionProviderImpl.java:122) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator$ConnectionProviderJdbcConnectionAccess.obtainConnection(JdbcEnvironmentInitiator.java:439) + at org.hibernate.resource.transaction.backend.jdbc.internal.DdlTransactionIsolatorNonJtaImpl.getIsolatedConnection(DdlTransactionIsolatorNonJtaImpl.java:46) + ... 39 common frames omitted +Caused by: java.net.ConnectException: Connection refused + at java.base/sun.nio.ch.Net.pollConnect(Native Method) + at java.base/sun.nio.ch.Net.pollConnectNow(Net.java:682) + at java.base/sun.nio.ch.NioSocketImpl.timedFinishConnect(NioSocketImpl.java:549) + at java.base/sun.nio.ch.NioSocketImpl.connect(NioSocketImpl.java:592) + at java.base/java.net.SocksSocketImpl.connect(SocksSocketImpl.java:327) + at java.base/java.net.Socket.connect(Socket.java:760) + at org.postgresql.core.PGStream.createSocket(PGStream.java:260) + at org.postgresql.core.PGStream.(PGStream.java:121) + at org.postgresql.core.v3.ConnectionFactoryImpl.tryConnect(ConnectionFactoryImpl.java:140) + at org.postgresql.core.v3.ConnectionFactoryImpl.openConnectionImpl(ConnectionFactoryImpl.java:268) + ... 53 common frames omitted +2025-10-29 10:34:30 [main] INFO c.unicorn.hgzero.stt.SttApplication - Starting SttApplication using Java 23.0.2 with PID 52885 (/Users/jominseo/HGZero/stt/build/classes/java/main started by jominseo in /Users/jominseo/HGZero/stt) +2025-10-29 10:34:30 [main] DEBUG c.unicorn.hgzero.stt.SttApplication - Running with Spring Boot v3.3.5, Spring v6.1.14 +2025-10-29 10:34:30 [main] INFO c.unicorn.hgzero.stt.SttApplication - No active profile set, falling back to 1 default profile: "default" +2025-10-29 10:34:30 [main] INFO o.s.d.r.c.RepositoryConfigurationDelegate - Multiple Spring Data modules found, entering strict repository configuration mode +2025-10-29 10:34:30 [main] INFO o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data JPA repositories in DEFAULT mode. +2025-10-29 10:34:30 [main] INFO o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 42 ms. Found 3 JPA repository interfaces. +2025-10-29 10:34:30 [main] INFO o.s.d.r.c.RepositoryConfigurationDelegate - Multiple Spring Data modules found, entering strict repository configuration mode +2025-10-29 10:34:30 [main] INFO o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data Redis repositories in DEFAULT mode. +2025-10-29 10:34: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.stt.repository.jpa.RecordingRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-10-29 10:34: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.stt.repository.jpa.TranscriptSegmentRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-10-29 10:34: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.stt.repository.jpa.TranscriptionRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-10-29 10:34:30 [main] INFO o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 5 ms. Found 0 Redis repository interfaces. +2025-10-29 10:34:30 [main] INFO o.s.b.w.e.tomcat.TomcatWebServer - Tomcat initialized with port 8084 (http) +2025-10-29 10:34:30 [main] INFO o.a.catalina.core.StandardService - Starting service [Tomcat] +2025-10-29 10:34:30 [main] INFO o.a.catalina.core.StandardEngine - Starting Servlet engine: [Apache Tomcat/10.1.31] +2025-10-29 10:34:30 [main] INFO o.a.c.c.C.[Tomcat].[localhost].[/] - Initializing Spring embedded WebApplicationContext +2025-10-29 10:34:30 [main] INFO o.s.b.w.s.c.ServletWebServerApplicationContext - Root WebApplicationContext: initialization completed in 730 ms +2025-10-29 10:34:31 [main] INFO o.h.jpa.internal.util.LogHelper - HHH000204: Processing PersistenceUnitInfo [name: default] +2025-10-29 10:34:31 [main] INFO org.hibernate.Version - HHH000412: Hibernate ORM core version 6.5.3.Final +2025-10-29 10:34:31 [main] INFO o.h.c.i.RegionFactoryInitiator - HHH000026: Second-level cache disabled +2025-10-29 10:34:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration boolean -> org.hibernate.type.BasicTypeReference@4a29fe2e +2025-10-29 10:34:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration boolean -> org.hibernate.type.BasicTypeReference@4a29fe2e +2025-10-29 10:34:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Boolean -> org.hibernate.type.BasicTypeReference@4a29fe2e +2025-10-29 10:34:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration numeric_boolean -> org.hibernate.type.BasicTypeReference@79135a38 +2025-10-29 10:34:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration org.hibernate.type.NumericBooleanConverter -> org.hibernate.type.BasicTypeReference@79135a38 +2025-10-29 10:34:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration true_false -> org.hibernate.type.BasicTypeReference@77fceac6 +2025-10-29 10:34:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration org.hibernate.type.TrueFalseConverter -> org.hibernate.type.BasicTypeReference@77fceac6 +2025-10-29 10:34:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration yes_no -> org.hibernate.type.BasicTypeReference@563c3aca +2025-10-29 10:34:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration org.hibernate.type.YesNoConverter -> org.hibernate.type.BasicTypeReference@563c3aca +2025-10-29 10:34:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration byte -> org.hibernate.type.BasicTypeReference@53e166ad +2025-10-29 10:34:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration byte -> org.hibernate.type.BasicTypeReference@53e166ad +2025-10-29 10:34:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Byte -> org.hibernate.type.BasicTypeReference@53e166ad +2025-10-29 10:34:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration binary -> org.hibernate.type.BasicTypeReference@30c03473 +2025-10-29 10:34:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration byte[] -> org.hibernate.type.BasicTypeReference@30c03473 +2025-10-29 10:34:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration [B -> org.hibernate.type.BasicTypeReference@30c03473 +2025-10-29 10:34:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration binary_wrapper -> org.hibernate.type.BasicTypeReference@20fa5277 +2025-10-29 10:34:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration wrapper-binary -> org.hibernate.type.BasicTypeReference@20fa5277 +2025-10-29 10:34:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration image -> org.hibernate.type.BasicTypeReference@17a7d6c8 +2025-10-29 10:34:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration blob -> org.hibernate.type.BasicTypeReference@4f2b1e9f +2025-10-29 10:34:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.sql.Blob -> org.hibernate.type.BasicTypeReference@4f2b1e9f +2025-10-29 10:34:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration materialized_blob -> org.hibernate.type.BasicTypeReference@7ef9c8a5 +2025-10-29 10:34:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration materialized_blob_wrapper -> org.hibernate.type.BasicTypeReference@c6244e7 +2025-10-29 10:34:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration short -> org.hibernate.type.BasicTypeReference@25dad235 +2025-10-29 10:34:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration short -> org.hibernate.type.BasicTypeReference@25dad235 +2025-10-29 10:34:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Short -> org.hibernate.type.BasicTypeReference@25dad235 +2025-10-29 10:34:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration integer -> org.hibernate.type.BasicTypeReference@3292eff7 +2025-10-29 10:34:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration int -> org.hibernate.type.BasicTypeReference@3292eff7 +2025-10-29 10:34:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Integer -> org.hibernate.type.BasicTypeReference@3292eff7 +2025-10-29 10:34:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration long -> org.hibernate.type.BasicTypeReference@29ea5e0 +2025-10-29 10:34:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration long -> org.hibernate.type.BasicTypeReference@29ea5e0 +2025-10-29 10:34:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Long -> org.hibernate.type.BasicTypeReference@29ea5e0 +2025-10-29 10:34:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration float -> org.hibernate.type.BasicTypeReference@1c459c28 +2025-10-29 10:34:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration float -> org.hibernate.type.BasicTypeReference@1c459c28 +2025-10-29 10:34:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Float -> org.hibernate.type.BasicTypeReference@1c459c28 +2025-10-29 10:34:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration double -> org.hibernate.type.BasicTypeReference@6ffdbeef +2025-10-29 10:34:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration double -> org.hibernate.type.BasicTypeReference@6ffdbeef +2025-10-29 10:34:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Double -> org.hibernate.type.BasicTypeReference@6ffdbeef +2025-10-29 10:34:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration big_integer -> org.hibernate.type.BasicTypeReference@4a3509b0 +2025-10-29 10:34:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.math.BigInteger -> org.hibernate.type.BasicTypeReference@4a3509b0 +2025-10-29 10:34:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration big_decimal -> org.hibernate.type.BasicTypeReference@3d7314b3 +2025-10-29 10:34:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.math.BigDecimal -> org.hibernate.type.BasicTypeReference@3d7314b3 +2025-10-29 10:34:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration character -> org.hibernate.type.BasicTypeReference@d677be9 +2025-10-29 10:34:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration char -> org.hibernate.type.BasicTypeReference@d677be9 +2025-10-29 10:34:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Character -> org.hibernate.type.BasicTypeReference@d677be9 +2025-10-29 10:34:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration character_nchar -> org.hibernate.type.BasicTypeReference@fefb66c +2025-10-29 10:34:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration string -> org.hibernate.type.BasicTypeReference@6d7556a8 +2025-10-29 10:34:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.String -> org.hibernate.type.BasicTypeReference@6d7556a8 +2025-10-29 10:34:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration nstring -> org.hibernate.type.BasicTypeReference@48860139 +2025-10-29 10:34:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration characters -> org.hibernate.type.BasicTypeReference@7e0883f3 +2025-10-29 10:34:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration char[] -> org.hibernate.type.BasicTypeReference@7e0883f3 +2025-10-29 10:34:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration [C -> org.hibernate.type.BasicTypeReference@7e0883f3 +2025-10-29 10:34:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration wrapper-characters -> org.hibernate.type.BasicTypeReference@ca60688 +2025-10-29 10:34:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration text -> org.hibernate.type.BasicTypeReference@4ba1c1a2 +2025-10-29 10:34:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration ntext -> org.hibernate.type.BasicTypeReference@33568e26 +2025-10-29 10:34:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration clob -> org.hibernate.type.BasicTypeReference@97b84a4 +2025-10-29 10:34:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.sql.Clob -> org.hibernate.type.BasicTypeReference@97b84a4 +2025-10-29 10:34:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration nclob -> org.hibernate.type.BasicTypeReference@35555145 +2025-10-29 10:34:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.sql.NClob -> org.hibernate.type.BasicTypeReference@35555145 +2025-10-29 10:34:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration materialized_clob -> org.hibernate.type.BasicTypeReference@70bc3a9c +2025-10-29 10:34:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration materialized_clob_char_array -> org.hibernate.type.BasicTypeReference@771cbd13 +2025-10-29 10:34:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration materialized_clob_character_array -> org.hibernate.type.BasicTypeReference@229749f0 +2025-10-29 10:34:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration materialized_nclob -> org.hibernate.type.BasicTypeReference@3d57fb9e +2025-10-29 10:34:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration materialized_nclob_character_array -> org.hibernate.type.BasicTypeReference@2c2e5e72 +2025-10-29 10:34:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration materialized_nclob_char_array -> org.hibernate.type.BasicTypeReference@3e489ac1 +2025-10-29 10:34:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration Duration -> org.hibernate.type.BasicTypeReference@26888c31 +2025-10-29 10:34:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.Duration -> org.hibernate.type.BasicTypeReference@26888c31 +2025-10-29 10:34:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration LocalDateTime -> org.hibernate.type.BasicTypeReference@24010875 +2025-10-29 10:34:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.LocalDateTime -> org.hibernate.type.BasicTypeReference@24010875 +2025-10-29 10:34:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration LocalDate -> org.hibernate.type.BasicTypeReference@7a021f49 +2025-10-29 10:34:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.LocalDate -> org.hibernate.type.BasicTypeReference@7a021f49 +2025-10-29 10:34:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration LocalTime -> org.hibernate.type.BasicTypeReference@e60c5a +2025-10-29 10:34:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.LocalTime -> org.hibernate.type.BasicTypeReference@e60c5a +2025-10-29 10:34:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration OffsetDateTime -> org.hibernate.type.BasicTypeReference@626df173 +2025-10-29 10:34:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.OffsetDateTime -> org.hibernate.type.BasicTypeReference@626df173 +2025-10-29 10:34:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration OffsetDateTimeWithTimezone -> org.hibernate.type.BasicTypeReference@4e030feb +2025-10-29 10:34:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration OffsetDateTimeWithoutTimezone -> org.hibernate.type.BasicTypeReference@2411b935 +2025-10-29 10:34:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration OffsetTime -> org.hibernate.type.BasicTypeReference@1425e531 +2025-10-29 10:34:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.OffsetTime -> org.hibernate.type.BasicTypeReference@1425e531 +2025-10-29 10:34:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration OffsetTimeUtc -> org.hibernate.type.BasicTypeReference@194e78af +2025-10-29 10:34:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration OffsetTimeWithTimezone -> org.hibernate.type.BasicTypeReference@4fe4503a +2025-10-29 10:34:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration OffsetTimeWithoutTimezone -> org.hibernate.type.BasicTypeReference@669580e2 +2025-10-29 10:34:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration ZonedDateTime -> org.hibernate.type.BasicTypeReference@5d22ed6c +2025-10-29 10:34:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.ZonedDateTime -> org.hibernate.type.BasicTypeReference@5d22ed6c +2025-10-29 10:34:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration ZonedDateTimeWithTimezone -> org.hibernate.type.BasicTypeReference@37c37d67 +2025-10-29 10:34:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration ZonedDateTimeWithoutTimezone -> org.hibernate.type.BasicTypeReference@5a4b8e25 +2025-10-29 10:34:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration date -> org.hibernate.type.BasicTypeReference@1013871e +2025-10-29 10:34:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.sql.Date -> org.hibernate.type.BasicTypeReference@1013871e +2025-10-29 10:34:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration time -> org.hibernate.type.BasicTypeReference@5a9051fd +2025-10-29 10:34:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.sql.Time -> org.hibernate.type.BasicTypeReference@5a9051fd +2025-10-29 10:34:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration timestamp -> org.hibernate.type.BasicTypeReference@7614378d +2025-10-29 10:34:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.sql.Timestamp -> org.hibernate.type.BasicTypeReference@7614378d +2025-10-29 10:34:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.util.Date -> org.hibernate.type.BasicTypeReference@7614378d +2025-10-29 10:34:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration calendar -> org.hibernate.type.BasicTypeReference@7028b5cc +2025-10-29 10:34:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.util.Calendar -> org.hibernate.type.BasicTypeReference@7028b5cc +2025-10-29 10:34:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.util.GregorianCalendar -> org.hibernate.type.BasicTypeReference@7028b5cc +2025-10-29 10:34:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration calendar_date -> org.hibernate.type.BasicTypeReference@7c0ff7a0 +2025-10-29 10:34:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration calendar_time -> org.hibernate.type.BasicTypeReference@24c84e65 +2025-10-29 10:34:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration instant -> org.hibernate.type.BasicTypeReference@7337bd2e +2025-10-29 10:34:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.Instant -> org.hibernate.type.BasicTypeReference@7337bd2e +2025-10-29 10:34:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration uuid -> org.hibernate.type.BasicTypeReference@4604e051 +2025-10-29 10:34:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.util.UUID -> org.hibernate.type.BasicTypeReference@4604e051 +2025-10-29 10:34:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration pg-uuid -> org.hibernate.type.BasicTypeReference@4604e051 +2025-10-29 10:34:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration uuid-binary -> org.hibernate.type.BasicTypeReference@4535bdc6 +2025-10-29 10:34:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration uuid-char -> org.hibernate.type.BasicTypeReference@23e86863 +2025-10-29 10:34:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration class -> org.hibernate.type.BasicTypeReference@6df87ffd +2025-10-29 10:34:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Class -> org.hibernate.type.BasicTypeReference@6df87ffd +2025-10-29 10:34:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration currency -> org.hibernate.type.BasicTypeReference@c1f0c7b +2025-10-29 10:34:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration Currency -> org.hibernate.type.BasicTypeReference@c1f0c7b +2025-10-29 10:34:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.util.Currency -> org.hibernate.type.BasicTypeReference@c1f0c7b +2025-10-29 10:34:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration locale -> org.hibernate.type.BasicTypeReference@642c5bb3 +2025-10-29 10:34:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.util.Locale -> org.hibernate.type.BasicTypeReference@642c5bb3 +2025-10-29 10:34:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration serializable -> org.hibernate.type.BasicTypeReference@4e79c25 +2025-10-29 10:34:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.io.Serializable -> org.hibernate.type.BasicTypeReference@4e79c25 +2025-10-29 10:34:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration timezone -> org.hibernate.type.BasicTypeReference@2ace1cd3 +2025-10-29 10:34:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.util.TimeZone -> org.hibernate.type.BasicTypeReference@2ace1cd3 +2025-10-29 10:34:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration ZoneOffset -> org.hibernate.type.BasicTypeReference@5e46a125 +2025-10-29 10:34:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.ZoneOffset -> org.hibernate.type.BasicTypeReference@5e46a125 +2025-10-29 10:34:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration url -> org.hibernate.type.BasicTypeReference@5831989d +2025-10-29 10:34:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.net.URL -> org.hibernate.type.BasicTypeReference@5831989d +2025-10-29 10:34:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration vector -> org.hibernate.type.BasicTypeReference@608f310a +2025-10-29 10:34:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration row_version -> org.hibernate.type.BasicTypeReference@3a7d914c +2025-10-29 10:34:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration object -> org.hibernate.type.JavaObjectType@4db568e1 +2025-10-29 10:34:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Object -> org.hibernate.type.JavaObjectType@4db568e1 +2025-10-29 10:34:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration null -> org.hibernate.type.NullType@111cbcda +2025-10-29 10:34:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration imm_date -> org.hibernate.type.BasicTypeReference@437c1a87 +2025-10-29 10:34:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration imm_time -> org.hibernate.type.BasicTypeReference@6c8e5ac4 +2025-10-29 10:34:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration imm_timestamp -> org.hibernate.type.BasicTypeReference@1800c1e3 +2025-10-29 10:34:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration imm_calendar -> org.hibernate.type.BasicTypeReference@3b8b4846 +2025-10-29 10:34:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration imm_calendar_date -> org.hibernate.type.BasicTypeReference@4e357792 +2025-10-29 10:34:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration imm_calendar_time -> org.hibernate.type.BasicTypeReference@50734cea +2025-10-29 10:34:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration imm_binary -> org.hibernate.type.BasicTypeReference@4e6280de +2025-10-29 10:34:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration imm_serializable -> org.hibernate.type.BasicTypeReference@2fca282c +2025-10-29 10:34:31 [main] INFO o.s.o.j.p.SpringPersistenceUnitInfo - No LoadTimeWeaver setup: ignoring JPA class transformer +2025-10-29 10:34:31 [main] INFO com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Starting... +2025-10-29 10:34:31 [main] INFO com.zaxxer.hikari.pool.HikariPool - HikariPool-1 - Added connection org.postgresql.jdbc.PgConnection@7ade62a6 +2025-10-29 10:34:31 [main] INFO com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Start completed. +2025-10-29 10:34: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 10:34:31 [main] DEBUG o.h.t.d.sql.spi.DdlTypeRegistry - addDescriptor(2003, org.hibernate.type.descriptor.sql.internal.ArrayDdlTypeImpl@2f3a0f37) replaced previous registration(org.hibernate.type.descriptor.sql.internal.ArrayDdlTypeImpl@7ec8db0c) +2025-10-29 10:34:31 [main] DEBUG o.h.t.d.sql.spi.DdlTypeRegistry - addDescriptor(6, org.hibernate.type.descriptor.sql.internal.CapacityDependentDdlType@4f1a5b93) replaced previous registration(org.hibernate.type.descriptor.sql.internal.DdlTypeImpl@22ee1ad7) +2025-10-29 10:34:31 [main] DEBUG o.h.t.d.jdbc.spi.JdbcTypeRegistry - addDescriptor(2004, BlobTypeDescriptor(BLOB_BINDING)) replaced previous registration(BlobTypeDescriptor(DEFAULT)) +2025-10-29 10:34:31 [main] DEBUG o.h.t.d.jdbc.spi.JdbcTypeRegistry - addDescriptor(2005, ClobTypeDescriptor(CLOB_BINDING)) replaced previous registration(ClobTypeDescriptor(DEFAULT)) +2025-10-29 10:34:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration JAVA_OBJECT -> org.hibernate.type.JavaObjectType@37196d53 +2025-10-29 10:34:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Object -> org.hibernate.type.JavaObjectType@37196d53 +2025-10-29 10:34:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Type registration key [java.lang.Object] overrode previous entry : `org.hibernate.type.JavaObjectType@4db568e1` +2025-10-29 10:34:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration org.hibernate.type.DurationType -> basicType@1(java.time.Duration,3015) +2025-10-29 10:34:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration Duration -> basicType@1(java.time.Duration,3015) +2025-10-29 10:34:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.Duration -> basicType@1(java.time.Duration,3015) +2025-10-29 10:34:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration org.hibernate.type.OffsetDateTimeType -> basicType@2(java.time.OffsetDateTime,3003) +2025-10-29 10:34:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration OffsetDateTime -> basicType@2(java.time.OffsetDateTime,3003) +2025-10-29 10:34:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.OffsetDateTime -> basicType@2(java.time.OffsetDateTime,3003) +2025-10-29 10:34:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration org.hibernate.type.ZonedDateTimeType -> basicType@3(java.time.ZonedDateTime,3003) +2025-10-29 10:34:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration ZonedDateTime -> basicType@3(java.time.ZonedDateTime,3003) +2025-10-29 10:34:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.ZonedDateTime -> basicType@3(java.time.ZonedDateTime,3003) +2025-10-29 10:34:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration org.hibernate.type.OffsetTimeType -> basicType@4(java.time.OffsetTime,3007) +2025-10-29 10:34:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration OffsetTime -> basicType@4(java.time.OffsetTime,3007) +2025-10-29 10:34:31 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.OffsetTime -> basicType@4(java.time.OffsetTime,3007) +2025-10-29 10:34:31 [main] DEBUG o.h.type.spi.TypeConfiguration$Scope - Scoping TypeConfiguration [org.hibernate.type.spi.TypeConfiguration@5c70c771] to MetadataBuildingContext [org.hibernate.boot.internal.MetadataBuildingContextRootImpl@346690d6] +2025-10-29 10:34: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 10:34:31 [main] DEBUG o.h.type.spi.TypeConfiguration$Scope - Scoping TypeConfiguration [org.hibernate.type.spi.TypeConfiguration@5c70c771] to SessionFactoryImplementor [org.hibernate.internal.SessionFactoryImpl@392af2e0] +2025-10-29 10:34:31 [main] DEBUG org.hibernate.SQL - + alter table if exists transcript_segments + alter column text set data type TEXT +2025-10-29 10:34:31 [main] DEBUG org.hibernate.SQL - + alter table if exists transcriptions + alter column full_text set data type TEXT +2025-10-29 10:34:31 [main] TRACE o.h.type.spi.TypeConfiguration$Scope - Handling #sessionFactoryCreated from [org.hibernate.internal.SessionFactoryImpl@392af2e0] for TypeConfiguration +2025-10-29 10:34:31 [main] INFO o.s.o.j.LocalContainerEntityManagerFactoryBean - Initialized JPA EntityManagerFactory for persistence unit 'default' +2025-10-29 10:34:31 [main] ERROR i.n.r.d.DnsServerAddressStreamProviders - Unable to load io.netty.resolver.dns.macos.MacOSDnsServerAddressStreamProvider, fallback to system defaults. This may result in incorrect DNS resolutions on MacOS. Check whether you have a dependency on 'io.netty:netty-resolver-dns-native-macos'. Use DEBUG level to see the full stack: java.lang.UnsatisfiedLinkError: failed to load the required native library +2025-10-29 10:34:32 [main] INFO o.s.d.j.r.query.QueryEnhancerFactory - Hibernate is in classpath; If applicable, HQL parser will be used. +2025-10-29 10:34:32 [main] INFO c.u.h.stt.service.AzureSpeechService - Azure Speech Service 초기화 시작 - subscriptionKey: 설정됨, region: eastus +2025-10-29 10:34:32 [main] INFO c.u.h.stt.service.AzureSpeechService - Azure Speech Service 초기화 완료 - Region: eastus, Language: ko-KR +2025-10-29 10:34: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 10:34:32 [main] WARN o.s.b.a.s.s.UserDetailsServiceAutoConfiguration - + +Using generated security password: f4a2b5bb-a861-43a5-84c2-755e02759472 + +This generated password is for development use only. Your security configuration must be updated before running your application in production. + +2025-10-29 10:34:32 [main] INFO o.s.s.c.a.a.c.InitializeUserDetailsBeanManagerConfigurer$InitializeUserDetailsManagerConfigurer - Global AuthenticationManager configured with UserDetailsService bean with name inMemoryUserDetailsManager +2025-10-29 10:34:32 [main] INFO o.s.b.a.e.web.EndpointLinksResolver - Exposing 3 endpoints beneath base path '/actuator' +2025-10-29 10:34:33 [main] INFO o.s.b.w.e.tomcat.TomcatWebServer - Tomcat started on port 8084 (http) with context path '/' +2025-10-29 10:34:33 [main] INFO c.unicorn.hgzero.stt.SttApplication - Started SttApplication in 3.057 seconds (process running for 3.175) +2025-10-29 10:34:43 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:34:43 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - 오디오 청크 없음 - meetingId: test-meeting-001 +2025-10-29 10:34:43 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:34:48 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:34:48 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - 오디오 청크 없음 - meetingId: test-meeting-001 +2025-10-29 10:34:48 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:34:53 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:34:53 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - 오디오 청크 없음 - meetingId: test-meeting-001 +2025-10-29 10:34:53 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:34:58 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:34:58 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - 오디오 청크 없음 - meetingId: test-meeting-001 +2025-10-29 10:34:58 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:35:03 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:35:03 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - 오디오 청크 없음 - meetingId: test-meeting-001 +2025-10-29 10:35:03 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:35:08 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:35:08 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - 오디오 청크 없음 - meetingId: test-meeting-001 +2025-10-29 10:35:08 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:35:13 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:35:13 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - 오디오 청크 없음 - meetingId: test-meeting-001 +2025-10-29 10:35:13 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:35:18 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:35:18 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - 오디오 청크 없음 - meetingId: test-meeting-001 +2025-10-29 10:35:18 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:35:23 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:35:23 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - 오디오 청크 없음 - meetingId: test-meeting-001 +2025-10-29 10:35:23 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:35:28 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:35:28 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - 오디오 청크 없음 - meetingId: test-meeting-001 +2025-10-29 10:35:28 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:35:33 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:35:33 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - 오디오 청크 없음 - meetingId: test-meeting-001 +2025-10-29 10:35:33 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:35:38 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:35:38 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - 오디오 청크 없음 - meetingId: test-meeting-001 +2025-10-29 10:35:38 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:35:43 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:35:43 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - 오디오 청크 없음 - meetingId: test-meeting-001 +2025-10-29 10:35:43 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:35:48 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:35:48 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - 오디오 청크 없음 - meetingId: test-meeting-001 +2025-10-29 10:35:48 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:35:53 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:35:53 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - 오디오 청크 없음 - meetingId: test-meeting-001 +2025-10-29 10:35:53 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:35:58 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:35:58 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - 오디오 청크 없음 - meetingId: test-meeting-001 +2025-10-29 10:35:58 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:36:03 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:36:03 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - 오디오 청크 없음 - meetingId: test-meeting-001 +2025-10-29 10:36:03 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:36:08 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:36:08 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - 오디오 청크 없음 - meetingId: test-meeting-001 +2025-10-29 10:36:08 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:36:13 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:36:13 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - 오디오 청크 없음 - meetingId: test-meeting-001 +2025-10-29 10:36:13 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:36:18 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:36:19 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - 오디오 청크 없음 - meetingId: test-meeting-001 +2025-10-29 10:36:19 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:36:24 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:36:24 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - 오디오 청크 없음 - meetingId: test-meeting-001 +2025-10-29 10:36:24 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:36:29 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:36:29 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - 오디오 청크 없음 - meetingId: test-meeting-001 +2025-10-29 10:36:29 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:36:34 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:36:34 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - 오디오 청크 없음 - meetingId: test-meeting-001 +2025-10-29 10:36:34 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:36:39 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:36:39 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - 오디오 청크 없음 - meetingId: test-meeting-001 +2025-10-29 10:36:39 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:36:44 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:36:44 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - 오디오 청크 없음 - meetingId: test-meeting-001 +2025-10-29 10:36:44 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:36:49 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:36:49 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - 오디오 청크 없음 - meetingId: test-meeting-001 +2025-10-29 10:36:49 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:36:54 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:36:54 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - 오디오 청크 없음 - meetingId: test-meeting-001 +2025-10-29 10:36:54 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:36:59 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:36:59 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - 오디오 청크 없음 - meetingId: test-meeting-001 +2025-10-29 10:36:59 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:37:04 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:37:04 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - 오디오 청크 없음 - meetingId: test-meeting-001 +2025-10-29 10:37:04 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:37:09 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:37:09 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - 오디오 청크 없음 - meetingId: test-meeting-001 +2025-10-29 10:37:09 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:37:14 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:37:14 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - 오디오 청크 없음 - meetingId: test-meeting-001 +2025-10-29 10:37:14 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:37:19 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:37:19 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - 오디오 청크 없음 - meetingId: test-meeting-001 +2025-10-29 10:37:19 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:37:24 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:37:24 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - 오디오 청크 없음 - meetingId: test-meeting-001 +2025-10-29 10:37:24 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:37:29 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:37:29 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - 오디오 청크 없음 - meetingId: test-meeting-001 +2025-10-29 10:37:29 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:37:34 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:37:34 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - 오디오 청크 없음 - meetingId: test-meeting-001 +2025-10-29 10:37:34 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:37:39 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:37:39 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - 오디오 청크 없음 - meetingId: test-meeting-001 +2025-10-29 10:37:39 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:37:44 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:37:44 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - 오디오 청크 없음 - meetingId: test-meeting-001 +2025-10-29 10:37:44 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:37:49 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:37:49 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - 오디오 청크 없음 - meetingId: test-meeting-001 +2025-10-29 10:37:49 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:37:54 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:37:54 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - 오디오 청크 없음 - meetingId: test-meeting-001 +2025-10-29 10:37:54 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:37:59 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:37:59 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - 오디오 청크 없음 - meetingId: test-meeting-001 +2025-10-29 10:37:59 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:38:04 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:38:04 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - 오디오 청크 없음 - meetingId: test-meeting-001 +2025-10-29 10:38:04 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:38:09 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:38:09 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - 오디오 청크 없음 - meetingId: test-meeting-001 +2025-10-29 10:38:09 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:38:14 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:38:14 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - 오디오 청크 없음 - meetingId: test-meeting-001 +2025-10-29 10:38:14 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:38:19 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:38:19 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - 오디오 청크 없음 - meetingId: test-meeting-001 +2025-10-29 10:38:19 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:38:24 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:38:24 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - 오디오 청크 없음 - meetingId: test-meeting-001 +2025-10-29 10:38:24 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:38:29 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:38:29 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - 오디오 청크 없음 - meetingId: test-meeting-001 +2025-10-29 10:38:29 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:38:34 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:38:34 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - 오디오 청크 없음 - meetingId: test-meeting-001 +2025-10-29 10:38:34 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:38:39 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:38:39 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - 오디오 청크 없음 - meetingId: test-meeting-001 +2025-10-29 10:38:39 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:38:44 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:38:44 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - 오디오 청크 없음 - meetingId: test-meeting-001 +2025-10-29 10:38:44 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:38:49 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:38:49 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - 오디오 청크 없음 - meetingId: test-meeting-001 +2025-10-29 10:38:49 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:38:54 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:38:54 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - 오디오 청크 없음 - meetingId: test-meeting-001 +2025-10-29 10:38:54 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:38:59 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:38:59 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - 오디오 청크 없음 - meetingId: test-meeting-001 +2025-10-29 10:38:59 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:39:04 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:39:05 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - 오디오 청크 없음 - meetingId: test-meeting-001 +2025-10-29 10:39:05 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:39:10 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:39:10 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - 오디오 청크 없음 - meetingId: test-meeting-001 +2025-10-29 10:39:10 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:39:15 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:39:15 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - 오디오 청크 없음 - meetingId: test-meeting-001 +2025-10-29 10:39:15 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:39:20 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:39:20 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - 오디오 청크 없음 - meetingId: test-meeting-001 +2025-10-29 10:39:20 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:39:25 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:39:25 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - 오디오 청크 없음 - meetingId: test-meeting-001 +2025-10-29 10:39:25 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:39:30 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:39:30 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - 오디오 청크 없음 - meetingId: test-meeting-001 +2025-10-29 10:39:30 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:39:35 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:39:35 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - 오디오 청크 없음 - meetingId: test-meeting-001 +2025-10-29 10:39:35 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:39:40 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:39:40 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - 오디오 청크 없음 - meetingId: test-meeting-001 +2025-10-29 10:39:40 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:39:45 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:39:45 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - 오디오 청크 없음 - meetingId: test-meeting-001 +2025-10-29 10:39:45 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:39:50 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:39:50 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - 오디오 청크 없음 - meetingId: test-meeting-001 +2025-10-29 10:39:50 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:39:55 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:39:55 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - 오디오 청크 없음 - meetingId: test-meeting-001 +2025-10-29 10:39:55 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:40:00 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:40:00 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - 오디오 청크 없음 - meetingId: test-meeting-001 +2025-10-29 10:40:00 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:40:05 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:40:05 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - 오디오 청크 없음 - meetingId: test-meeting-001 +2025-10-29 10:40:05 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:40:10 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:40:10 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - 오디오 청크 없음 - meetingId: test-meeting-001 +2025-10-29 10:40:10 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:40:15 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:40:15 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - 오디오 청크 없음 - meetingId: test-meeting-001 +2025-10-29 10:40:15 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:40:20 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:40:20 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - 오디오 청크 없음 - meetingId: test-meeting-001 +2025-10-29 10:40:20 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:40:25 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:40:25 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - 오디오 청크 없음 - meetingId: test-meeting-001 +2025-10-29 10:40:25 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:40:30 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:40:30 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - 오디오 청크 없음 - meetingId: test-meeting-001 +2025-10-29 10:40:30 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:40:35 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:40:35 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - 오디오 청크 없음 - meetingId: test-meeting-001 +2025-10-29 10:40:35 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:40:40 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:40:40 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - 오디오 청크 없음 - meetingId: test-meeting-001 +2025-10-29 10:40:40 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:40:45 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:40:46 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - 오디오 청크 없음 - meetingId: test-meeting-001 +2025-10-29 10:40:46 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:40:51 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:40:51 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - 오디오 청크 없음 - meetingId: test-meeting-001 +2025-10-29 10:40:51 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:40:56 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:40:56 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - 오디오 청크 없음 - meetingId: test-meeting-001 +2025-10-29 10:40:56 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:41:01 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:41:01 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - 오디오 청크 없음 - meetingId: test-meeting-001 +2025-10-29 10:41:01 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:41:06 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:41:06 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - 오디오 청크 없음 - meetingId: test-meeting-001 +2025-10-29 10:41:06 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:41:11 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:41:11 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - 오디오 청크 없음 - meetingId: test-meeting-001 +2025-10-29 10:41:11 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:41:16 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:41:16 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - 오디오 청크 없음 - meetingId: test-meeting-001 +2025-10-29 10:41:16 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:41:21 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:41:21 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - 오디오 청크 없음 - meetingId: test-meeting-001 +2025-10-29 10:41:21 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:41:26 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:41:26 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - 오디오 청크 없음 - meetingId: test-meeting-001 +2025-10-29 10:41:26 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:41:31 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:41:31 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - 오디오 청크 없음 - meetingId: test-meeting-001 +2025-10-29 10:41:31 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:41:36 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:41:36 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - 오디오 청크 없음 - meetingId: test-meeting-001 +2025-10-29 10:41:36 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:41:41 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:41:41 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - 오디오 청크 없음 - meetingId: test-meeting-001 +2025-10-29 10:41:41 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:41:46 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:41:46 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - 오디오 청크 없음 - meetingId: test-meeting-001 +2025-10-29 10:41:46 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:41:51 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:41:51 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - 오디오 청크 없음 - meetingId: test-meeting-001 +2025-10-29 10:41:51 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:41:53 [http-nio-8084-exec-1] INFO o.a.c.c.C.[Tomcat].[localhost].[/] - Initializing Spring DispatcherServlet 'dispatcherServlet' +2025-10-29 10:41:53 [http-nio-8084-exec-1] INFO o.s.web.servlet.DispatcherServlet - Initializing Servlet 'dispatcherServlet' +2025-10-29 10:41:53 [http-nio-8084-exec-1] INFO o.s.web.servlet.DispatcherServlet - Completed initialization in 1 ms +2025-10-29 10:41:53 [http-nio-8084-exec-1] WARN com.zaxxer.hikari.pool.PoolBase - HikariPool-1 - Failed to validate connection org.postgresql.jdbc.PgConnection@7ade62a6 (This connection has been closed.). Possibly consider using a shorter maxLifetime value. +2025-10-29 10:41:53 [http-nio-8084-exec-1] WARN com.zaxxer.hikari.pool.PoolBase - HikariPool-1 - Failed to validate connection org.postgresql.jdbc.PgConnection@f2a4187 (This connection has been closed.). Possibly consider using a shorter maxLifetime value. +2025-10-29 10:41:53 [http-nio-8084-exec-1] WARN com.zaxxer.hikari.pool.PoolBase - HikariPool-1 - Failed to validate connection org.postgresql.jdbc.PgConnection@210f68f5 (This connection has been closed.). Possibly consider using a shorter maxLifetime value. +2025-10-29 10:41:53 [http-nio-8084-exec-1] WARN com.zaxxer.hikari.pool.PoolBase - HikariPool-1 - Failed to validate connection org.postgresql.jdbc.PgConnection@231b0428 (This connection has been closed.). Possibly consider using a shorter maxLifetime value. +2025-10-29 10:41:56 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:41:56 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - 오디오 청크 없음 - meetingId: test-meeting-001 +2025-10-29 10:41:56 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:41:58 [http-nio-8084-exec-1] WARN com.zaxxer.hikari.pool.PoolBase - HikariPool-1 - Failed to validate connection org.postgresql.jdbc.PgConnection@2813ab7a (This connection has been closed.). Possibly consider using a shorter maxLifetime value. +2025-10-29 10:42:01 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:42:01 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - 오디오 청크 없음 - meetingId: test-meeting-001 +2025-10-29 10:42:01 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:42:06 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:42:06 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - 오디오 청크 없음 - meetingId: test-meeting-001 +2025-10-29 10:42:06 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:42:11 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:42:11 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - 오디오 청크 없음 - meetingId: test-meeting-001 +2025-10-29 10:42:11 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:42:16 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:42:16 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - 오디오 청크 없음 - meetingId: test-meeting-001 +2025-10-29 10:42:16 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:42:21 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:42:21 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - 오디오 청크 없음 - meetingId: test-meeting-001 +2025-10-29 10:42:21 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:42:25 [main] INFO c.unicorn.hgzero.stt.SttApplication - Starting SttApplication using Java 23.0.2 with PID 53079 (/Users/jominseo/HGZero/stt/build/classes/java/main started by jominseo in /Users/jominseo/HGZero/stt) +2025-10-29 10:42:25 [main] DEBUG c.unicorn.hgzero.stt.SttApplication - Running with Spring Boot v3.3.5, Spring v6.1.14 +2025-10-29 10:42:25 [main] INFO c.unicorn.hgzero.stt.SttApplication - No active profile set, falling back to 1 default profile: "default" +2025-10-29 10:42:26 [main] INFO o.s.d.r.c.RepositoryConfigurationDelegate - Multiple Spring Data modules found, entering strict repository configuration mode +2025-10-29 10:42:26 [main] INFO o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data JPA repositories in DEFAULT mode. +2025-10-29 10:42:26 [main] INFO o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 39 ms. Found 3 JPA repository interfaces. +2025-10-29 10:42:26 [main] INFO o.s.d.r.c.RepositoryConfigurationDelegate - Multiple Spring Data modules found, entering strict repository configuration mode +2025-10-29 10:42:26 [main] INFO o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data Redis repositories in DEFAULT mode. +2025-10-29 10:42:26 [main] INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.unicorn.hgzero.stt.repository.jpa.RecordingRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-10-29 10:42:26 [main] INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.unicorn.hgzero.stt.repository.jpa.TranscriptSegmentRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-10-29 10:42:26 [main] INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.unicorn.hgzero.stt.repository.jpa.TranscriptionRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-10-29 10:42:26 [main] INFO o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 6 ms. Found 0 Redis repository interfaces. +2025-10-29 10:42:26 [main] INFO o.s.b.w.e.tomcat.TomcatWebServer - Tomcat initialized with port 8084 (http) +2025-10-29 10:42:26 [main] INFO o.a.catalina.core.StandardService - Starting service [Tomcat] +2025-10-29 10:42:26 [main] INFO o.a.catalina.core.StandardEngine - Starting Servlet engine: [Apache Tomcat/10.1.31] +2025-10-29 10:42:26 [main] INFO o.a.c.c.C.[Tomcat].[localhost].[/] - Initializing Spring embedded WebApplicationContext +2025-10-29 10:42:26 [main] INFO o.s.b.w.s.c.ServletWebServerApplicationContext - Root WebApplicationContext: initialization completed in 673 ms +2025-10-29 10:42:26 [main] INFO o.h.jpa.internal.util.LogHelper - HHH000204: Processing PersistenceUnitInfo [name: default] +2025-10-29 10:42:26 [main] INFO org.hibernate.Version - HHH000412: Hibernate ORM core version 6.5.3.Final +2025-10-29 10:42:26 [main] INFO o.h.c.i.RegionFactoryInitiator - HHH000026: Second-level cache disabled +2025-10-29 10:42:26 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration boolean -> org.hibernate.type.BasicTypeReference@625f5712 +2025-10-29 10:42:26 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration boolean -> org.hibernate.type.BasicTypeReference@625f5712 +2025-10-29 10:42:26 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Boolean -> org.hibernate.type.BasicTypeReference@625f5712 +2025-10-29 10:42:26 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration numeric_boolean -> org.hibernate.type.BasicTypeReference@5e62ca19 +2025-10-29 10:42:26 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration org.hibernate.type.NumericBooleanConverter -> org.hibernate.type.BasicTypeReference@5e62ca19 +2025-10-29 10:42:26 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration true_false -> org.hibernate.type.BasicTypeReference@188bf4d8 +2025-10-29 10:42:26 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration org.hibernate.type.TrueFalseConverter -> org.hibernate.type.BasicTypeReference@188bf4d8 +2025-10-29 10:42:26 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration yes_no -> org.hibernate.type.BasicTypeReference@7dd7ec56 +2025-10-29 10:42:26 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration org.hibernate.type.YesNoConverter -> org.hibernate.type.BasicTypeReference@7dd7ec56 +2025-10-29 10:42:26 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration byte -> org.hibernate.type.BasicTypeReference@6528d339 +2025-10-29 10:42:26 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration byte -> org.hibernate.type.BasicTypeReference@6528d339 +2025-10-29 10:42:26 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Byte -> org.hibernate.type.BasicTypeReference@6528d339 +2025-10-29 10:42:26 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration binary -> org.hibernate.type.BasicTypeReference@2dd2ff87 +2025-10-29 10:42:26 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration byte[] -> org.hibernate.type.BasicTypeReference@2dd2ff87 +2025-10-29 10:42:26 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration [B -> org.hibernate.type.BasicTypeReference@2dd2ff87 +2025-10-29 10:42:26 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration binary_wrapper -> org.hibernate.type.BasicTypeReference@6a38e3d1 +2025-10-29 10:42:26 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration wrapper-binary -> org.hibernate.type.BasicTypeReference@6a38e3d1 +2025-10-29 10:42:26 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration image -> org.hibernate.type.BasicTypeReference@28cf179c +2025-10-29 10:42:26 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration blob -> org.hibernate.type.BasicTypeReference@bdda8a7 +2025-10-29 10:42:26 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.sql.Blob -> org.hibernate.type.BasicTypeReference@bdda8a7 +2025-10-29 10:42:26 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration materialized_blob -> org.hibernate.type.BasicTypeReference@3149409c +2025-10-29 10:42:26 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration materialized_blob_wrapper -> org.hibernate.type.BasicTypeReference@1c421b0f +2025-10-29 10:42:26 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration short -> org.hibernate.type.BasicTypeReference@4ce18cec +2025-10-29 10:42:26 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration short -> org.hibernate.type.BasicTypeReference@4ce18cec +2025-10-29 10:42:26 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Short -> org.hibernate.type.BasicTypeReference@4ce18cec +2025-10-29 10:42:26 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration integer -> org.hibernate.type.BasicTypeReference@2a9f8d47 +2025-10-29 10:42:26 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration int -> org.hibernate.type.BasicTypeReference@2a9f8d47 +2025-10-29 10:42:26 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Integer -> org.hibernate.type.BasicTypeReference@2a9f8d47 +2025-10-29 10:42:26 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration long -> org.hibernate.type.BasicTypeReference@51297528 +2025-10-29 10:42:26 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration long -> org.hibernate.type.BasicTypeReference@51297528 +2025-10-29 10:42:26 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Long -> org.hibernate.type.BasicTypeReference@51297528 +2025-10-29 10:42:26 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration float -> org.hibernate.type.BasicTypeReference@5d3f8661 +2025-10-29 10:42:26 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration float -> org.hibernate.type.BasicTypeReference@5d3f8661 +2025-10-29 10:42:26 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Float -> org.hibernate.type.BasicTypeReference@5d3f8661 +2025-10-29 10:42:26 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration double -> org.hibernate.type.BasicTypeReference@1df9f7c6 +2025-10-29 10:42:26 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration double -> org.hibernate.type.BasicTypeReference@1df9f7c6 +2025-10-29 10:42:26 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Double -> org.hibernate.type.BasicTypeReference@1df9f7c6 +2025-10-29 10:42:26 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration big_integer -> org.hibernate.type.BasicTypeReference@4b5aa48b +2025-10-29 10:42:26 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.math.BigInteger -> org.hibernate.type.BasicTypeReference@4b5aa48b +2025-10-29 10:42:26 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration big_decimal -> org.hibernate.type.BasicTypeReference@51c008fd +2025-10-29 10:42:26 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.math.BigDecimal -> org.hibernate.type.BasicTypeReference@51c008fd +2025-10-29 10:42:26 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration character -> org.hibernate.type.BasicTypeReference@70ed902a +2025-10-29 10:42:26 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration char -> org.hibernate.type.BasicTypeReference@70ed902a +2025-10-29 10:42:26 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Character -> org.hibernate.type.BasicTypeReference@70ed902a +2025-10-29 10:42:26 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration character_nchar -> org.hibernate.type.BasicTypeReference@22f80e36 +2025-10-29 10:42:26 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration string -> org.hibernate.type.BasicTypeReference@3c98981e +2025-10-29 10:42:26 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.String -> org.hibernate.type.BasicTypeReference@3c98981e +2025-10-29 10:42:26 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration nstring -> org.hibernate.type.BasicTypeReference@6dcee890 +2025-10-29 10:42:26 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration characters -> org.hibernate.type.BasicTypeReference@713e49c3 +2025-10-29 10:42:26 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration char[] -> org.hibernate.type.BasicTypeReference@713e49c3 +2025-10-29 10:42:26 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration [C -> org.hibernate.type.BasicTypeReference@713e49c3 +2025-10-29 10:42:26 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration wrapper-characters -> org.hibernate.type.BasicTypeReference@13d5606c +2025-10-29 10:42:26 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration text -> org.hibernate.type.BasicTypeReference@6bf54260 +2025-10-29 10:42:26 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration ntext -> org.hibernate.type.BasicTypeReference@7165bde6 +2025-10-29 10:42:26 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration clob -> org.hibernate.type.BasicTypeReference@72168258 +2025-10-29 10:42:26 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.sql.Clob -> org.hibernate.type.BasicTypeReference@72168258 +2025-10-29 10:42:26 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration nclob -> org.hibernate.type.BasicTypeReference@4af84a76 +2025-10-29 10:42:26 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.sql.NClob -> org.hibernate.type.BasicTypeReference@4af84a76 +2025-10-29 10:42:26 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration materialized_clob -> org.hibernate.type.BasicTypeReference@b5ff70b +2025-10-29 10:42:26 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration materialized_clob_char_array -> org.hibernate.type.BasicTypeReference@5709e10b +2025-10-29 10:42:26 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration materialized_clob_character_array -> org.hibernate.type.BasicTypeReference@114badf0 +2025-10-29 10:42:26 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration materialized_nclob -> org.hibernate.type.BasicTypeReference@19e8fe55 +2025-10-29 10:42:26 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration materialized_nclob_character_array -> org.hibernate.type.BasicTypeReference@6d7bb5cc +2025-10-29 10:42:26 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration materialized_nclob_char_array -> org.hibernate.type.BasicTypeReference@756200d1 +2025-10-29 10:42:26 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration Duration -> org.hibernate.type.BasicTypeReference@390a07a0 +2025-10-29 10:42:26 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.Duration -> org.hibernate.type.BasicTypeReference@390a07a0 +2025-10-29 10:42:26 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration LocalDateTime -> org.hibernate.type.BasicTypeReference@674e4c82 +2025-10-29 10:42:26 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.LocalDateTime -> org.hibernate.type.BasicTypeReference@674e4c82 +2025-10-29 10:42:26 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration LocalDate -> org.hibernate.type.BasicTypeReference@572b4072 +2025-10-29 10:42:26 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.LocalDate -> org.hibernate.type.BasicTypeReference@572b4072 +2025-10-29 10:42:26 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration LocalTime -> org.hibernate.type.BasicTypeReference@322ab6ce +2025-10-29 10:42:26 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.LocalTime -> org.hibernate.type.BasicTypeReference@322ab6ce +2025-10-29 10:42:26 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration OffsetDateTime -> org.hibernate.type.BasicTypeReference@5b74902c +2025-10-29 10:42:26 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.OffsetDateTime -> org.hibernate.type.BasicTypeReference@5b74902c +2025-10-29 10:42:26 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration OffsetDateTimeWithTimezone -> org.hibernate.type.BasicTypeReference@4e4bfd9c +2025-10-29 10:42:26 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration OffsetDateTimeWithoutTimezone -> org.hibernate.type.BasicTypeReference@43ee1cf7 +2025-10-29 10:42:26 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration OffsetTime -> org.hibernate.type.BasicTypeReference@24954e82 +2025-10-29 10:42:26 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.OffsetTime -> org.hibernate.type.BasicTypeReference@24954e82 +2025-10-29 10:42:26 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration OffsetTimeUtc -> org.hibernate.type.BasicTypeReference@5b1f5fcc +2025-10-29 10:42:26 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration OffsetTimeWithTimezone -> org.hibernate.type.BasicTypeReference@4a29fe2e +2025-10-29 10:42:26 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration OffsetTimeWithoutTimezone -> org.hibernate.type.BasicTypeReference@79135a38 +2025-10-29 10:42:26 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration ZonedDateTime -> org.hibernate.type.BasicTypeReference@77fceac6 +2025-10-29 10:42:26 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.ZonedDateTime -> org.hibernate.type.BasicTypeReference@77fceac6 +2025-10-29 10:42:26 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration ZonedDateTimeWithTimezone -> org.hibernate.type.BasicTypeReference@563c3aca +2025-10-29 10:42:26 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration ZonedDateTimeWithoutTimezone -> org.hibernate.type.BasicTypeReference@53e166ad +2025-10-29 10:42:26 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration date -> org.hibernate.type.BasicTypeReference@30c03473 +2025-10-29 10:42:26 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.sql.Date -> org.hibernate.type.BasicTypeReference@30c03473 +2025-10-29 10:42:26 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration time -> org.hibernate.type.BasicTypeReference@20fa5277 +2025-10-29 10:42:26 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.sql.Time -> org.hibernate.type.BasicTypeReference@20fa5277 +2025-10-29 10:42:26 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration timestamp -> org.hibernate.type.BasicTypeReference@17a7d6c8 +2025-10-29 10:42:26 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.sql.Timestamp -> org.hibernate.type.BasicTypeReference@17a7d6c8 +2025-10-29 10:42:26 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.util.Date -> org.hibernate.type.BasicTypeReference@17a7d6c8 +2025-10-29 10:42:26 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration calendar -> org.hibernate.type.BasicTypeReference@4f2b1e9f +2025-10-29 10:42:26 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.util.Calendar -> org.hibernate.type.BasicTypeReference@4f2b1e9f +2025-10-29 10:42:26 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.util.GregorianCalendar -> org.hibernate.type.BasicTypeReference@4f2b1e9f +2025-10-29 10:42:26 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration calendar_date -> org.hibernate.type.BasicTypeReference@7ef9c8a5 +2025-10-29 10:42:26 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration calendar_time -> org.hibernate.type.BasicTypeReference@c6244e7 +2025-10-29 10:42:26 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration instant -> org.hibernate.type.BasicTypeReference@25dad235 +2025-10-29 10:42:26 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.Instant -> org.hibernate.type.BasicTypeReference@25dad235 +2025-10-29 10:42:26 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration uuid -> org.hibernate.type.BasicTypeReference@3292eff7 +2025-10-29 10:42:26 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.util.UUID -> org.hibernate.type.BasicTypeReference@3292eff7 +2025-10-29 10:42:26 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration pg-uuid -> org.hibernate.type.BasicTypeReference@3292eff7 +2025-10-29 10:42:26 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration uuid-binary -> org.hibernate.type.BasicTypeReference@29ea5e0 +2025-10-29 10:42:26 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration uuid-char -> org.hibernate.type.BasicTypeReference@1c459c28 +2025-10-29 10:42:26 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration class -> org.hibernate.type.BasicTypeReference@6ffdbeef +2025-10-29 10:42:26 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Class -> org.hibernate.type.BasicTypeReference@6ffdbeef +2025-10-29 10:42:26 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration currency -> org.hibernate.type.BasicTypeReference@4a3509b0 +2025-10-29 10:42:26 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration Currency -> org.hibernate.type.BasicTypeReference@4a3509b0 +2025-10-29 10:42:26 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.util.Currency -> org.hibernate.type.BasicTypeReference@4a3509b0 +2025-10-29 10:42:26 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration locale -> org.hibernate.type.BasicTypeReference@3d7314b3 +2025-10-29 10:42:26 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.util.Locale -> org.hibernate.type.BasicTypeReference@3d7314b3 +2025-10-29 10:42:26 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration serializable -> org.hibernate.type.BasicTypeReference@d677be9 +2025-10-29 10:42:26 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.io.Serializable -> org.hibernate.type.BasicTypeReference@d677be9 +2025-10-29 10:42:26 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration timezone -> org.hibernate.type.BasicTypeReference@fefb66c +2025-10-29 10:42:26 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.util.TimeZone -> org.hibernate.type.BasicTypeReference@fefb66c +2025-10-29 10:42:26 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration ZoneOffset -> org.hibernate.type.BasicTypeReference@6d7556a8 +2025-10-29 10:42:26 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.ZoneOffset -> org.hibernate.type.BasicTypeReference@6d7556a8 +2025-10-29 10:42:26 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration url -> org.hibernate.type.BasicTypeReference@48860139 +2025-10-29 10:42:26 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.net.URL -> org.hibernate.type.BasicTypeReference@48860139 +2025-10-29 10:42:26 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration vector -> org.hibernate.type.BasicTypeReference@7e0883f3 +2025-10-29 10:42:26 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration row_version -> org.hibernate.type.BasicTypeReference@ca60688 +2025-10-29 10:42:26 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration object -> org.hibernate.type.JavaObjectType@3a13f663 +2025-10-29 10:42:26 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Object -> org.hibernate.type.JavaObjectType@3a13f663 +2025-10-29 10:42:26 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration null -> org.hibernate.type.NullType@983050b +2025-10-29 10:42:26 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration imm_date -> org.hibernate.type.BasicTypeReference@6aadb092 +2025-10-29 10:42:26 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration imm_time -> org.hibernate.type.BasicTypeReference@4caf875c +2025-10-29 10:42:26 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration imm_timestamp -> org.hibernate.type.BasicTypeReference@5d15789f +2025-10-29 10:42:26 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration imm_calendar -> org.hibernate.type.BasicTypeReference@5abb7a8f +2025-10-29 10:42:26 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration imm_calendar_date -> org.hibernate.type.BasicTypeReference@6684589a +2025-10-29 10:42:26 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration imm_calendar_time -> org.hibernate.type.BasicTypeReference@5621a671 +2025-10-29 10:42:26 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration imm_binary -> org.hibernate.type.BasicTypeReference@2006fdaa +2025-10-29 10:42:26 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration imm_serializable -> org.hibernate.type.BasicTypeReference@21688427 +2025-10-29 10:42:26 [main] INFO o.s.o.j.p.SpringPersistenceUnitInfo - No LoadTimeWeaver setup: ignoring JPA class transformer +2025-10-29 10:42:26 [main] INFO com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Starting... +2025-10-29 10:42:26 [main] INFO com.zaxxer.hikari.pool.HikariPool - HikariPool-1 - Added connection org.postgresql.jdbc.PgConnection@7ee3a2ed +2025-10-29 10:42:26 [main] INFO com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Start completed. +2025-10-29 10:42:26 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:42:26 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - 오디오 청크 없음 - meetingId: test-meeting-001 +2025-10-29 10:42:26 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:42:26 [main] WARN org.hibernate.orm.deprecation - HHH90000025: PostgreSQLDialect does not need to be specified explicitly using 'hibernate.dialect' (remove the property setting and it will be selected by default) +2025-10-29 10:42:27 [main] DEBUG o.h.t.d.sql.spi.DdlTypeRegistry - addDescriptor(2003, org.hibernate.type.descriptor.sql.internal.ArrayDdlTypeImpl@61aa6300) replaced previous registration(org.hibernate.type.descriptor.sql.internal.ArrayDdlTypeImpl@7e2e0b8a) +2025-10-29 10:42:27 [main] DEBUG o.h.t.d.sql.spi.DdlTypeRegistry - addDescriptor(6, org.hibernate.type.descriptor.sql.internal.CapacityDependentDdlType@7f5f7731) replaced previous registration(org.hibernate.type.descriptor.sql.internal.DdlTypeImpl@6a4f7c17) +2025-10-29 10:42:27 [main] DEBUG o.h.t.d.jdbc.spi.JdbcTypeRegistry - addDescriptor(2004, BlobTypeDescriptor(BLOB_BINDING)) replaced previous registration(BlobTypeDescriptor(DEFAULT)) +2025-10-29 10:42:27 [main] DEBUG o.h.t.d.jdbc.spi.JdbcTypeRegistry - addDescriptor(2005, ClobTypeDescriptor(CLOB_BINDING)) replaced previous registration(ClobTypeDescriptor(DEFAULT)) +2025-10-29 10:42:27 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration JAVA_OBJECT -> org.hibernate.type.JavaObjectType@39dce2df +2025-10-29 10:42:27 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Object -> org.hibernate.type.JavaObjectType@39dce2df +2025-10-29 10:42:27 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Type registration key [java.lang.Object] overrode previous entry : `org.hibernate.type.JavaObjectType@3a13f663` +2025-10-29 10:42:27 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration org.hibernate.type.DurationType -> basicType@1(java.time.Duration,3015) +2025-10-29 10:42:27 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration Duration -> basicType@1(java.time.Duration,3015) +2025-10-29 10:42:27 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.Duration -> basicType@1(java.time.Duration,3015) +2025-10-29 10:42:27 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration org.hibernate.type.OffsetDateTimeType -> basicType@2(java.time.OffsetDateTime,3003) +2025-10-29 10:42:27 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration OffsetDateTime -> basicType@2(java.time.OffsetDateTime,3003) +2025-10-29 10:42:27 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.OffsetDateTime -> basicType@2(java.time.OffsetDateTime,3003) +2025-10-29 10:42:27 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration org.hibernate.type.ZonedDateTimeType -> basicType@3(java.time.ZonedDateTime,3003) +2025-10-29 10:42:27 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration ZonedDateTime -> basicType@3(java.time.ZonedDateTime,3003) +2025-10-29 10:42:27 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.ZonedDateTime -> basicType@3(java.time.ZonedDateTime,3003) +2025-10-29 10:42:27 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration org.hibernate.type.OffsetTimeType -> basicType@4(java.time.OffsetTime,3007) +2025-10-29 10:42:27 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration OffsetTime -> basicType@4(java.time.OffsetTime,3007) +2025-10-29 10:42:27 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.OffsetTime -> basicType@4(java.time.OffsetTime,3007) +2025-10-29 10:42:27 [main] DEBUG o.h.type.spi.TypeConfiguration$Scope - Scoping TypeConfiguration [org.hibernate.type.spi.TypeConfiguration@47eff554] to MetadataBuildingContext [org.hibernate.boot.internal.MetadataBuildingContextRootImpl@56ec6ac0] +2025-10-29 10:42:27 [main] INFO o.h.e.t.j.p.i.JtaPlatformInitiator - HHH000489: No JTA platform available (set 'hibernate.transaction.jta.platform' to enable JTA platform integration) +2025-10-29 10:42:27 [main] DEBUG o.h.type.spi.TypeConfiguration$Scope - Scoping TypeConfiguration [org.hibernate.type.spi.TypeConfiguration@47eff554] to SessionFactoryImplementor [org.hibernate.internal.SessionFactoryImpl@53b60595] +2025-10-29 10:42:27 [main] DEBUG org.hibernate.SQL - + alter table if exists transcript_segments + alter column text set data type TEXT +2025-10-29 10:42:27 [main] DEBUG org.hibernate.SQL - + alter table if exists transcriptions + alter column full_text set data type TEXT +2025-10-29 10:42:27 [main] TRACE o.h.type.spi.TypeConfiguration$Scope - Handling #sessionFactoryCreated from [org.hibernate.internal.SessionFactoryImpl@53b60595] for TypeConfiguration +2025-10-29 10:42:27 [main] INFO o.s.o.j.LocalContainerEntityManagerFactoryBean - Initialized JPA EntityManagerFactory for persistence unit 'default' +2025-10-29 10:42:27 [main] ERROR i.n.r.d.DnsServerAddressStreamProviders - Unable to load io.netty.resolver.dns.macos.MacOSDnsServerAddressStreamProvider, fallback to system defaults. This may result in incorrect DNS resolutions on MacOS. Check whether you have a dependency on 'io.netty:netty-resolver-dns-native-macos'. Use DEBUG level to see the full stack: java.lang.UnsatisfiedLinkError: failed to load the required native library +2025-10-29 10:42:27 [main] INFO o.s.d.j.r.query.QueryEnhancerFactory - Hibernate is in classpath; If applicable, HQL parser will be used. +2025-10-29 10:42:27 [main] INFO c.u.h.stt.service.AzureSpeechService - Azure Speech Service 초기화 시작 - subscriptionKey: 미설정, region: eastus +2025-10-29 10:42:27 [main] WARN c.u.h.stt.service.AzureSpeechService - Azure Speech Subscription Key 미설정 - 시뮬레이션 모드로 실행 +2025-10-29 10:42:27 [main] WARN o.s.b.a.o.j.JpaBaseConfiguration$JpaWebConfiguration - spring.jpa.open-in-view is enabled by default. Therefore, database queries may be performed during view rendering. Explicitly configure spring.jpa.open-in-view to disable this warning +2025-10-29 10:42:27 [main] WARN o.s.b.a.s.s.UserDetailsServiceAutoConfiguration - + +Using generated security password: 783b8fe9-b349-4224-a560-861733c802c1 + +This generated password is for development use only. Your security configuration must be updated before running your application in production. + +2025-10-29 10:42:27 [main] INFO o.s.s.c.a.a.c.InitializeUserDetailsBeanManagerConfigurer$InitializeUserDetailsManagerConfigurer - Global AuthenticationManager configured with UserDetailsService bean with name inMemoryUserDetailsManager +2025-10-29 10:42:28 [main] INFO o.s.b.a.e.web.EndpointLinksResolver - Exposing 3 endpoints beneath base path '/actuator' +2025-10-29 10:42:28 [main] WARN o.s.b.w.s.c.AnnotationConfigServletWebServerApplicationContext - Exception encountered during context initialization - cancelling refresh attempt: org.springframework.context.ApplicationContextException: Failed to start bean 'webServerStartStop' +2025-10-29 10:42:28 [main] INFO o.s.o.j.LocalContainerEntityManagerFactoryBean - Closing JPA EntityManagerFactory for persistence unit 'default' +2025-10-29 10:42:28 [main] TRACE o.h.type.spi.TypeConfiguration$Scope - Handling #sessionFactoryClosed from [org.hibernate.internal.SessionFactoryImpl@53b60595] for TypeConfiguration +2025-10-29 10:42:28 [main] DEBUG o.h.type.spi.TypeConfiguration$Scope - Un-scoping TypeConfiguration [org.hibernate.type.spi.TypeConfiguration$Scope@17e1a5e] from SessionFactory [org.hibernate.internal.SessionFactoryImpl@53b60595] +2025-10-29 10:42:28 [main] INFO com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Shutdown initiated... +2025-10-29 10:42:28 [main] INFO com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Shutdown completed. +2025-10-29 10:42:28 [main] INFO o.s.b.a.l.ConditionEvaluationReportLogger - + +Error starting ApplicationContext. To display the condition evaluation report re-run your application with 'debug' enabled. +2025-10-29 10:42:28 [main] ERROR o.s.b.d.LoggingFailureAnalysisReporter - + +*************************** +APPLICATION FAILED TO START +*************************** + +Description: + +Web server failed to start. Port 8084 was already in use. + +Action: + +Identify and stop the process that's listening on port 8084 or configure this application to listen on another port. + +2025-10-29 10:42:32 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:42:32 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - 오디오 청크 없음 - meetingId: test-meeting-001 +2025-10-29 10:42:32 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:42:37 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:42:37 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - 오디오 청크 없음 - meetingId: test-meeting-001 +2025-10-29 10:42:37 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:42:42 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:42:42 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - 오디오 청크 없음 - meetingId: test-meeting-001 +2025-10-29 10:42:42 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:42:42 [Test worker] INFO c.u.hgzero.stt.SttApplicationTest - Starting SttApplicationTest using Java 23.0.2 with PID 53104 (started by jominseo in /Users/jominseo/HGZero/stt) +2025-10-29 10:42:42 [Test worker] INFO c.u.hgzero.stt.SttApplicationTest - The following 1 profile is active: "test" +2025-10-29 10:42:43 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration boolean -> org.hibernate.type.BasicTypeReference@68f69ca3 +2025-10-29 10:42:43 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration boolean -> org.hibernate.type.BasicTypeReference@68f69ca3 +2025-10-29 10:42:43 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Boolean -> org.hibernate.type.BasicTypeReference@68f69ca3 +2025-10-29 10:42:43 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration numeric_boolean -> org.hibernate.type.BasicTypeReference@7af9595d +2025-10-29 10:42:43 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration org.hibernate.type.NumericBooleanConverter -> org.hibernate.type.BasicTypeReference@7af9595d +2025-10-29 10:42:43 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration true_false -> org.hibernate.type.BasicTypeReference@7a34c1f6 +2025-10-29 10:42:43 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration org.hibernate.type.TrueFalseConverter -> org.hibernate.type.BasicTypeReference@7a34c1f6 +2025-10-29 10:42:43 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration yes_no -> org.hibernate.type.BasicTypeReference@6e9f8160 +2025-10-29 10:42:43 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration org.hibernate.type.YesNoConverter -> org.hibernate.type.BasicTypeReference@6e9f8160 +2025-10-29 10:42:43 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration byte -> org.hibernate.type.BasicTypeReference@3e998033 +2025-10-29 10:42:43 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration byte -> org.hibernate.type.BasicTypeReference@3e998033 +2025-10-29 10:42:43 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Byte -> org.hibernate.type.BasicTypeReference@3e998033 +2025-10-29 10:42:43 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration binary -> org.hibernate.type.BasicTypeReference@e1a150c +2025-10-29 10:42:43 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration byte[] -> org.hibernate.type.BasicTypeReference@e1a150c +2025-10-29 10:42:43 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration [B -> org.hibernate.type.BasicTypeReference@e1a150c +2025-10-29 10:42:43 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration binary_wrapper -> org.hibernate.type.BasicTypeReference@527d5e48 +2025-10-29 10:42:43 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration wrapper-binary -> org.hibernate.type.BasicTypeReference@527d5e48 +2025-10-29 10:42:43 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration image -> org.hibernate.type.BasicTypeReference@407b41e6 +2025-10-29 10:42:43 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration blob -> org.hibernate.type.BasicTypeReference@3291d9c2 +2025-10-29 10:42:43 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.sql.Blob -> org.hibernate.type.BasicTypeReference@3291d9c2 +2025-10-29 10:42:43 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration materialized_blob -> org.hibernate.type.BasicTypeReference@6cfd08e9 +2025-10-29 10:42:43 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration materialized_blob_wrapper -> org.hibernate.type.BasicTypeReference@54ca9420 +2025-10-29 10:42:43 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration short -> org.hibernate.type.BasicTypeReference@4ea48b2e +2025-10-29 10:42:43 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration short -> org.hibernate.type.BasicTypeReference@4ea48b2e +2025-10-29 10:42:43 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Short -> org.hibernate.type.BasicTypeReference@4ea48b2e +2025-10-29 10:42:43 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration integer -> org.hibernate.type.BasicTypeReference@72c704f1 +2025-10-29 10:42:43 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration int -> org.hibernate.type.BasicTypeReference@72c704f1 +2025-10-29 10:42:43 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Integer -> org.hibernate.type.BasicTypeReference@72c704f1 +2025-10-29 10:42:43 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration long -> org.hibernate.type.BasicTypeReference@76f9e000 +2025-10-29 10:42:43 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration long -> org.hibernate.type.BasicTypeReference@76f9e000 +2025-10-29 10:42:43 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Long -> org.hibernate.type.BasicTypeReference@76f9e000 +2025-10-29 10:42:43 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration float -> org.hibernate.type.BasicTypeReference@7612116b +2025-10-29 10:42:43 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration float -> org.hibernate.type.BasicTypeReference@7612116b +2025-10-29 10:42:43 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Float -> org.hibernate.type.BasicTypeReference@7612116b +2025-10-29 10:42:43 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration double -> org.hibernate.type.BasicTypeReference@1c05097c +2025-10-29 10:42:43 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration double -> org.hibernate.type.BasicTypeReference@1c05097c +2025-10-29 10:42:43 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Double -> org.hibernate.type.BasicTypeReference@1c05097c +2025-10-29 10:42:43 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration big_integer -> org.hibernate.type.BasicTypeReference@562f6681 +2025-10-29 10:42:43 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.math.BigInteger -> org.hibernate.type.BasicTypeReference@562f6681 +2025-10-29 10:42:43 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration big_decimal -> org.hibernate.type.BasicTypeReference@6f6f65a4 +2025-10-29 10:42:43 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.math.BigDecimal -> org.hibernate.type.BasicTypeReference@6f6f65a4 +2025-10-29 10:42:43 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration character -> org.hibernate.type.BasicTypeReference@990b86b +2025-10-29 10:42:43 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration char -> org.hibernate.type.BasicTypeReference@990b86b +2025-10-29 10:42:43 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Character -> org.hibernate.type.BasicTypeReference@990b86b +2025-10-29 10:42:43 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration character_nchar -> org.hibernate.type.BasicTypeReference@3dea1ecc +2025-10-29 10:42:43 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration string -> org.hibernate.type.BasicTypeReference@105c6c9e +2025-10-29 10:42:43 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.String -> org.hibernate.type.BasicTypeReference@105c6c9e +2025-10-29 10:42:43 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration nstring -> org.hibernate.type.BasicTypeReference@40a7974 +2025-10-29 10:42:43 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration characters -> org.hibernate.type.BasicTypeReference@8d5da7e +2025-10-29 10:42:43 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration char[] -> org.hibernate.type.BasicTypeReference@8d5da7e +2025-10-29 10:42:43 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration [C -> org.hibernate.type.BasicTypeReference@8d5da7e +2025-10-29 10:42:43 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration wrapper-characters -> org.hibernate.type.BasicTypeReference@65a4b9d6 +2025-10-29 10:42:43 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration text -> org.hibernate.type.BasicTypeReference@16ef1160 +2025-10-29 10:42:43 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration ntext -> org.hibernate.type.BasicTypeReference@41f90b10 +2025-10-29 10:42:43 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration clob -> org.hibernate.type.BasicTypeReference@67593f7b +2025-10-29 10:42:43 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.sql.Clob -> org.hibernate.type.BasicTypeReference@67593f7b +2025-10-29 10:42:43 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration nclob -> org.hibernate.type.BasicTypeReference@2773504f +2025-10-29 10:42:43 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.sql.NClob -> org.hibernate.type.BasicTypeReference@2773504f +2025-10-29 10:42:43 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration materialized_clob -> org.hibernate.type.BasicTypeReference@497921d0 +2025-10-29 10:42:43 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration materialized_clob_char_array -> org.hibernate.type.BasicTypeReference@40d10264 +2025-10-29 10:42:43 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration materialized_clob_character_array -> org.hibernate.type.BasicTypeReference@6edd4fe2 +2025-10-29 10:42:43 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration materialized_nclob -> org.hibernate.type.BasicTypeReference@53918b5e +2025-10-29 10:42:43 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration materialized_nclob_character_array -> org.hibernate.type.BasicTypeReference@5366575d +2025-10-29 10:42:43 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration materialized_nclob_char_array -> org.hibernate.type.BasicTypeReference@1b6cad77 +2025-10-29 10:42:43 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration Duration -> org.hibernate.type.BasicTypeReference@1fca53a7 +2025-10-29 10:42:43 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.Duration -> org.hibernate.type.BasicTypeReference@1fca53a7 +2025-10-29 10:42:43 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration LocalDateTime -> org.hibernate.type.BasicTypeReference@40dee07b +2025-10-29 10:42:43 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.LocalDateTime -> org.hibernate.type.BasicTypeReference@40dee07b +2025-10-29 10:42:43 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration LocalDate -> org.hibernate.type.BasicTypeReference@21e39b82 +2025-10-29 10:42:43 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.LocalDate -> org.hibernate.type.BasicTypeReference@21e39b82 +2025-10-29 10:42:43 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration LocalTime -> org.hibernate.type.BasicTypeReference@5f9a8ddc +2025-10-29 10:42:43 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.LocalTime -> org.hibernate.type.BasicTypeReference@5f9a8ddc +2025-10-29 10:42:43 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration OffsetDateTime -> org.hibernate.type.BasicTypeReference@1280bae3 +2025-10-29 10:42:43 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.OffsetDateTime -> org.hibernate.type.BasicTypeReference@1280bae3 +2025-10-29 10:42:43 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration OffsetDateTimeWithTimezone -> org.hibernate.type.BasicTypeReference@256a5df0 +2025-10-29 10:42:43 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration OffsetDateTimeWithoutTimezone -> org.hibernate.type.BasicTypeReference@1868ed54 +2025-10-29 10:42:43 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration OffsetTime -> org.hibernate.type.BasicTypeReference@131777e8 +2025-10-29 10:42:43 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.OffsetTime -> org.hibernate.type.BasicTypeReference@131777e8 +2025-10-29 10:42:43 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration OffsetTimeUtc -> org.hibernate.type.BasicTypeReference@45790cb +2025-10-29 10:42:43 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration OffsetTimeWithTimezone -> org.hibernate.type.BasicTypeReference@73a5d86c +2025-10-29 10:42:43 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration OffsetTimeWithoutTimezone -> org.hibernate.type.BasicTypeReference@2cf88901 +2025-10-29 10:42:43 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration ZonedDateTime -> org.hibernate.type.BasicTypeReference@4780341 +2025-10-29 10:42:43 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.ZonedDateTime -> org.hibernate.type.BasicTypeReference@4780341 +2025-10-29 10:42:43 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration ZonedDateTimeWithTimezone -> org.hibernate.type.BasicTypeReference@3c910acd +2025-10-29 10:42:43 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration ZonedDateTimeWithoutTimezone -> org.hibernate.type.BasicTypeReference@612ac38b +2025-10-29 10:42:43 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration date -> org.hibernate.type.BasicTypeReference@9f2fe2e +2025-10-29 10:42:43 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.sql.Date -> org.hibernate.type.BasicTypeReference@9f2fe2e +2025-10-29 10:42:43 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration time -> org.hibernate.type.BasicTypeReference@4dd4965a +2025-10-29 10:42:43 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.sql.Time -> org.hibernate.type.BasicTypeReference@4dd4965a +2025-10-29 10:42:43 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration timestamp -> org.hibernate.type.BasicTypeReference@79273a4f +2025-10-29 10:42:43 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.sql.Timestamp -> org.hibernate.type.BasicTypeReference@79273a4f +2025-10-29 10:42:43 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.util.Date -> org.hibernate.type.BasicTypeReference@79273a4f +2025-10-29 10:42:43 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration calendar -> org.hibernate.type.BasicTypeReference@4e26987b +2025-10-29 10:42:43 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.util.Calendar -> org.hibernate.type.BasicTypeReference@4e26987b +2025-10-29 10:42:43 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.util.GregorianCalendar -> org.hibernate.type.BasicTypeReference@4e26987b +2025-10-29 10:42:43 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration calendar_date -> org.hibernate.type.BasicTypeReference@50bb1c1f +2025-10-29 10:42:43 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration calendar_time -> org.hibernate.type.BasicTypeReference@39342614 +2025-10-29 10:42:43 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration instant -> org.hibernate.type.BasicTypeReference@7981963f +2025-10-29 10:42:43 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.Instant -> org.hibernate.type.BasicTypeReference@7981963f +2025-10-29 10:42:43 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration uuid -> org.hibernate.type.BasicTypeReference@31e3c34 +2025-10-29 10:42:43 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.util.UUID -> org.hibernate.type.BasicTypeReference@31e3c34 +2025-10-29 10:42:43 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration pg-uuid -> org.hibernate.type.BasicTypeReference@31e3c34 +2025-10-29 10:42:43 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration uuid-binary -> org.hibernate.type.BasicTypeReference@b4d83ac +2025-10-29 10:42:43 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration uuid-char -> org.hibernate.type.BasicTypeReference@13d10057 +2025-10-29 10:42:43 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration class -> org.hibernate.type.BasicTypeReference@66944c7c +2025-10-29 10:42:43 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Class -> org.hibernate.type.BasicTypeReference@66944c7c +2025-10-29 10:42:43 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration currency -> org.hibernate.type.BasicTypeReference@14993306 +2025-10-29 10:42:43 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration Currency -> org.hibernate.type.BasicTypeReference@14993306 +2025-10-29 10:42:43 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.util.Currency -> org.hibernate.type.BasicTypeReference@14993306 +2025-10-29 10:42:43 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration locale -> org.hibernate.type.BasicTypeReference@73ae82da +2025-10-29 10:42:43 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.util.Locale -> org.hibernate.type.BasicTypeReference@73ae82da +2025-10-29 10:42:43 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration serializable -> org.hibernate.type.BasicTypeReference@6866e740 +2025-10-29 10:42:43 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.io.Serializable -> org.hibernate.type.BasicTypeReference@6866e740 +2025-10-29 10:42:43 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration timezone -> org.hibernate.type.BasicTypeReference@2cd5b19c +2025-10-29 10:42:43 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.util.TimeZone -> org.hibernate.type.BasicTypeReference@2cd5b19c +2025-10-29 10:42:43 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration ZoneOffset -> org.hibernate.type.BasicTypeReference@7109b603 +2025-10-29 10:42:43 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.ZoneOffset -> org.hibernate.type.BasicTypeReference@7109b603 +2025-10-29 10:42:43 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration url -> org.hibernate.type.BasicTypeReference@76b642aa +2025-10-29 10:42:43 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.net.URL -> org.hibernate.type.BasicTypeReference@76b642aa +2025-10-29 10:42:43 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration vector -> org.hibernate.type.BasicTypeReference@29b5e7db +2025-10-29 10:42:43 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration row_version -> org.hibernate.type.BasicTypeReference@286dfa20 +2025-10-29 10:42:43 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration object -> org.hibernate.type.JavaObjectType@3909a854 +2025-10-29 10:42:43 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Object -> org.hibernate.type.JavaObjectType@3909a854 +2025-10-29 10:42:43 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration null -> org.hibernate.type.NullType@55f6f965 +2025-10-29 10:42:43 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration imm_date -> org.hibernate.type.BasicTypeReference@40ddf339 +2025-10-29 10:42:43 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration imm_time -> org.hibernate.type.BasicTypeReference@c83ed77 +2025-10-29 10:42:43 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration imm_timestamp -> org.hibernate.type.BasicTypeReference@d271a54 +2025-10-29 10:42:43 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration imm_calendar -> org.hibernate.type.BasicTypeReference@6ff8e744 +2025-10-29 10:42:43 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration imm_calendar_date -> org.hibernate.type.BasicTypeReference@53e82089 +2025-10-29 10:42:43 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration imm_calendar_time -> org.hibernate.type.BasicTypeReference@66a8751a +2025-10-29 10:42:43 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration imm_binary -> org.hibernate.type.BasicTypeReference@4ec27c4c +2025-10-29 10:42:43 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration imm_serializable -> org.hibernate.type.BasicTypeReference@12200670 +2025-10-29 10:42:43 [Test worker] INFO com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Starting... +2025-10-29 10:42:43 [Test worker] INFO com.zaxxer.hikari.pool.HikariPool - HikariPool-1 - Added connection conn0: url=jdbc:h2:mem:testdb user=SA +2025-10-29 10:42:43 [Test worker] INFO com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Start completed. +2025-10-29 10:42:43 [Test worker] WARN org.hibernate.orm.deprecation - HHH90000025: H2Dialect does not need to be specified explicitly using 'hibernate.dialect' (remove the property setting and it will be selected by default) +2025-10-29 10:42:43 [Test worker] DEBUG o.h.t.d.jdbc.spi.JdbcTypeRegistry - addDescriptor(NCharTypeDescriptor) replaced previous registration(CharTypeDescriptor) +2025-10-29 10:42:43 [Test worker] DEBUG o.h.t.d.jdbc.spi.JdbcTypeRegistry - addDescriptor(NVarcharTypeDescriptor) replaced previous registration(VarcharTypeDescriptor) +2025-10-29 10:42:43 [Test worker] DEBUG o.h.t.d.jdbc.spi.JdbcTypeRegistry - addDescriptor(LongNVarcharTypeDescriptor) replaced previous registration(LongVarcharTypeDescriptor) +2025-10-29 10:42:43 [Test worker] DEBUG o.h.t.d.jdbc.spi.JdbcTypeRegistry - addDescriptor(NClobTypeDescriptor(DEFAULT)) replaced previous registration(ClobTypeDescriptor(DEFAULT)) +2025-10-29 10:42:43 [Test worker] DEBUG o.h.t.d.jdbc.spi.JdbcTypeRegistry - addDescriptor(2005, ClobTypeDescriptor(STREAM_BINDING)) replaced previous registration(ClobTypeDescriptor(DEFAULT)) +2025-10-29 10:42:43 [Test worker] DEBUG o.h.t.d.jdbc.spi.JdbcTypeRegistry - addDescriptor(TimestampUtcDescriptor) replaced previous registration(TimestampUtcDescriptor) +2025-10-29 10:42:43 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration org.hibernate.type.DurationType -> basicType@1(java.time.Duration,3015) +2025-10-29 10:42:43 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration Duration -> basicType@1(java.time.Duration,3015) +2025-10-29 10:42:43 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.Duration -> basicType@1(java.time.Duration,3015) +2025-10-29 10:42:43 [Test worker] DEBUG o.h.type.spi.TypeConfiguration$Scope - Scoping TypeConfiguration [org.hibernate.type.spi.TypeConfiguration@6f8fb906] to MetadataBuildingContext [org.hibernate.boot.internal.MetadataBuildingContextRootImpl@728535c6] +2025-10-29 10:42:43 [Test worker] DEBUG o.h.type.spi.TypeConfiguration$Scope - Scoping TypeConfiguration [org.hibernate.type.spi.TypeConfiguration@6f8fb906] to SessionFactoryImplementor [org.hibernate.internal.SessionFactoryImpl@900ffc4] +2025-10-29 10:42:43 [Test worker] DEBUG org.hibernate.SQL - + drop table if exists recordings cascade +2025-10-29 10:42:43 [Test worker] DEBUG org.hibernate.SQL - + drop table if exists transcript_segments cascade +2025-10-29 10:42:43 [Test worker] DEBUG org.hibernate.SQL - + drop table if exists transcriptions cascade +2025-10-29 10:42:43 [Test worker] DEBUG org.hibernate.SQL - + create table recordings ( + duration integer, + segment_count integer, + speaker_count integer, + created_at timestamp(6) not null, + end_time timestamp(6), + start_time timestamp(6), + updated_at timestamp(6) not null, + language varchar(10) not null, + meeting_id varchar(50) not null, + recording_id varchar(50) not null, + session_id varchar(50) not null, + status enum ('COMPLETED','ERROR','READY','RECORDING','STOPPED') not null, + primary key (recording_id) + ) +2025-10-29 10:42:43 [Test worker] DEBUG org.hibernate.SQL - + create table transcript_segments ( + chunk_index integer, + confidence float(53), + duration float(53), + warning_flag boolean, + created_at timestamp(6) not null, + timestamp bigint not null, + updated_at timestamp(6) not null, + recording_id varchar(50) not null, + segment_id varchar(50) not null, + speaker_id varchar(50), + transcript_id varchar(50), + speaker_name varchar(100), + text TEXT not null, + primary key (segment_id) + ) +2025-10-29 10:42:43 [Test worker] DEBUG org.hibernate.SQL - + create table transcriptions ( + average_confidence float(53), + segment_count integer, + speaker_count integer, + total_duration integer, + completed_at timestamp(6), + created_at timestamp(6) not null, + updated_at timestamp(6) not null, + recording_id varchar(50) not null, + transcript_id varchar(50) not null, + full_text TEXT, + primary key (transcript_id) + ) +2025-10-29 10:42:43 [Test worker] TRACE o.h.type.spi.TypeConfiguration$Scope - Handling #sessionFactoryCreated from [org.hibernate.internal.SessionFactoryImpl@900ffc4] for TypeConfiguration +2025-10-29 10:42:43 [Test worker] ERROR i.n.r.d.DnsServerAddressStreamProviders - Unable to load io.netty.resolver.dns.macos.MacOSDnsServerAddressStreamProvider, fallback to system defaults. This may result in incorrect DNS resolutions on MacOS. Check whether you have a dependency on 'io.netty:netty-resolver-dns-native-macos'. Use DEBUG level to see the full stack: java.lang.UnsatisfiedLinkError: failed to load the required native library +2025-10-29 10:42:44 [Test worker] INFO c.u.h.stt.service.AzureSpeechService - Azure Speech Service 초기화 시작 - subscriptionKey: 설정됨, region: eastus +2025-10-29 10:42:44 [Test worker] INFO c.u.h.stt.service.AzureSpeechService - Azure Speech Service 초기화 완료 - Region: eastus, Language: ko-KR +2025-10-29 10:42:45 [Test worker] WARN o.s.b.a.s.s.UserDetailsServiceAutoConfiguration - + +Using generated security password: 371457f7-36fa-4245-b914-ce8c61b5ce50 + +This generated password is for development use only. Your security configuration must be updated before running your application in production. + +2025-10-29 10:42:45 [Test worker] WARN o.s.c.a.AnnotationConfigApplicationContext - Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'createWebSocketContainer' defined in class path resource [com/unicorn/hgzero/stt/config/WebSocketConfig.class]: A ServletContext is required to access the jakarta.websocket.server.ServerContainer instance +2025-10-29 10:42:45 [Test worker] INFO c.u.h.stt.service.AzureSpeechService - Azure Speech Service 종료 +2025-10-29 10:42:45 [Test worker] DEBUG org.hibernate.SQL - + drop table if exists recordings cascade +2025-10-29 10:42:45 [Test worker] DEBUG org.hibernate.SQL - + drop table if exists transcript_segments cascade +2025-10-29 10:42:45 [Test worker] DEBUG org.hibernate.SQL - + drop table if exists transcriptions cascade +2025-10-29 10:42:45 [Test worker] TRACE o.h.type.spi.TypeConfiguration$Scope - Handling #sessionFactoryClosed from [org.hibernate.internal.SessionFactoryImpl@900ffc4] for TypeConfiguration +2025-10-29 10:42:45 [Test worker] DEBUG o.h.type.spi.TypeConfiguration$Scope - Un-scoping TypeConfiguration [org.hibernate.type.spi.TypeConfiguration$Scope@545cfddb] from SessionFactory [org.hibernate.internal.SessionFactoryImpl@900ffc4] +2025-10-29 10:42:45 [Test worker] INFO com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Shutdown initiated... +2025-10-29 10:42:45 [Test worker] INFO com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Shutdown completed. +2025-10-29 10:42:45 [Test worker] ERROR o.s.boot.SpringApplication - Application run failed +org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'createWebSocketContainer' defined in class path resource [com/unicorn/hgzero/stt/config/WebSocketConfig.class]: A ServletContext is required to access the jakarta.websocket.server.ServerContainer instance + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1806) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:600) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:522) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:337) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:335) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:969) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:971) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:625) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:754) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:456) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:335) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:58) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:46) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1463) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:553) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:225) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:152) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:130) + at org.springframework.test.context.support.DependencyInjectionTestExecutionListener.injectDependencies(DependencyInjectionTestExecutionListener.java:142) + at org.springframework.test.context.support.DependencyInjectionTestExecutionListener.prepareTestInstance(DependencyInjectionTestExecutionListener.java:98) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:260) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:163) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:378) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:383) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:378) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:215) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:197) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1709) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:570) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:560) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:315) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:807) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:290) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:289) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:279) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:278) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:106) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:105) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:69) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:128) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:128) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1597) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:160) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:146) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:144) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:143) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:100) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1597) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:160) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:146) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:144) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:143) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:100) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103) + at java.base/java.lang.reflect.Method.invoke(Method.java:580) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:122) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:72) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: java.lang.IllegalStateException: A ServletContext is required to access the jakarta.websocket.server.ServerContainer instance + at org.springframework.util.Assert.state(Assert.java:76) + at org.springframework.web.socket.server.standard.ServletServerContainerFactoryBean.afterPropertiesSet(ServletServerContainerFactoryBean.java:113) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1853) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1802) + ... 105 common frames omitted +2025-10-29 10:42:45 [Test worker] WARN o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.support.DependencyInjectionTestExecutionListener] to prepare test instance [com.unicorn.hgzero.stt.SttApplicationTest@3035b9e6] +java.lang.IllegalStateException: Failed to load ApplicationContext for [MergedContextConfiguration@15516e5a testClass = com.unicorn.hgzero.stt.SttApplicationTest, locations = [], classes = [com.unicorn.hgzero.stt.SttApplication], contextInitializerClasses = [], activeProfiles = ["test"], propertySourceDescriptors = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true", "spring.main.web-application-type=none"], contextCustomizers = [org.springframework.boot.test.autoconfigure.OnFailureConditionReportContextCustomizerFactory$OnFailureConditionReportContextCustomizer@4da602fc, org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@1f, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizer@57eda880, [ImportsContextCustomizer@28336feb key = [com.unicorn.hgzero.stt.config.TestConfig]], org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@5af3a0f, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@72cf2de5, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@0, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@7b324585, org.springframework.boot.test.web.reactor.netty.DisableReactorResourceFactoryGlobalResourcesContextCustomizerFactory$DisableReactorResourceFactoryGlobalResourcesContextCustomizerCustomizer@47db5fa5, org.springframework.boot.test.context.SpringBootTestAnnotation@4f74f1a8], contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:180) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:130) + at org.springframework.test.context.support.DependencyInjectionTestExecutionListener.injectDependencies(DependencyInjectionTestExecutionListener.java:142) + at org.springframework.test.context.support.DependencyInjectionTestExecutionListener.prepareTestInstance(DependencyInjectionTestExecutionListener.java:98) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:260) + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:163) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:378) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:383) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:378) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:215) + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:197) + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1709) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:570) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:560) + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:315) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:807) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:377) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:290) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:289) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:279) + at java.base/java.util.Optional.orElseGet(Optional.java:364) + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:278) + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:106) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:105) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:69) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:128) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:128) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1597) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:160) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:146) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:144) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:143) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:100) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1597) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:160) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:146) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:144) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:143) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:100) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) + at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103) + at java.base/java.lang.reflect.Method.invoke(Method.java:580) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:122) + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:72) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) +Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'createWebSocketContainer' defined in class path resource [com/unicorn/hgzero/stt/config/WebSocketConfig.class]: A ServletContext is required to access the jakarta.websocket.server.ServerContainer instance + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1806) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:600) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:522) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:337) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:335) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:969) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:971) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:625) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:754) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:456) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:335) + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:58) + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:46) + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1463) + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:553) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:225) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:152) + ... 84 common frames omitted +Caused by: java.lang.IllegalStateException: A ServletContext is required to access the jakarta.websocket.server.ServerContainer instance + at org.springframework.util.Assert.state(Assert.java:76) + at org.springframework.web.socket.server.standard.ServletServerContainerFactoryBean.afterPropertiesSet(ServletServerContainerFactoryBean.java:113) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1853) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1802) + ... 105 common frames omitted +2025-10-29 10:42:45 [Test worker] INFO c.u.h.s.c.RecordingControllerTest - Starting RecordingControllerTest using Java 23.0.2 with PID 53104 (started by jominseo in /Users/jominseo/HGZero/stt) +2025-10-29 10:42:45 [Test worker] DEBUG c.u.h.s.c.RecordingControllerTest - Running with Spring Boot v3.3.5, Spring v6.1.14 +2025-10-29 10:42:45 [Test worker] INFO c.u.h.s.c.RecordingControllerTest - No active profile set, falling back to 1 default profile: "default" +2025-10-29 10:42:45 [Test worker] INFO o.s.d.r.c.RepositoryConfigurationDelegate - Multiple Spring Data modules found, entering strict repository configuration mode +2025-10-29 10:42:45 [Test worker] INFO o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data JPA repositories in DEFAULT mode. +2025-10-29 10:42:45 [Test worker] INFO o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 2 ms. Found 3 JPA repository interfaces. +2025-10-29 10:42:45 [Test worker] WARN o.s.w.c.s.GenericWebApplicationContext - Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'jpaSharedEM_entityManagerFactory': Cannot resolve reference to bean 'entityManagerFactory' while setting constructor argument +2025-10-29 10:42:45 [Test worker] INFO o.s.b.a.l.ConditionEvaluationReportLogger - + +Error starting ApplicationContext. To display the condition evaluation report re-run your application with 'debug' enabled. +2025-10-29 10:42:45 [Test worker] ERROR o.s.b.d.LoggingFailureAnalysisReporter - + +*************************** +APPLICATION FAILED TO START +*************************** + +Description: + +A component required a bean named 'entityManagerFactory' that could not be found. + + +Action: + +Consider defining a bean named 'entityManagerFactory' in your configuration. + +2025-10-29 10:42:45 [Test worker] WARN o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.boot.test.mock.mockito.MockitoTestExecutionListener] to prepare test instance [com.unicorn.hgzero.stt.controller.RecordingControllerTest@4dbd1fdb] +java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@390645a testClass = com.unicorn.hgzero.stt.controller.RecordingControllerTest, locations = [], classes = [com.unicorn.hgzero.stt.SttApplication], contextInitializerClasses = [], activeProfiles = [], propertySourceDescriptors = [], propertySourceProperties = ["org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.OnFailureConditionReportContextCustomizerFactory$OnFailureConditionReportContextCustomizer@4da602fc, org.springframework.boot.test.autoconfigure.OverrideAutoConfigurationContextCustomizerFactory$DisableAutoConfigurationContextCustomizer@30e4cf5e, org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@1f, org.springframework.boot.test.autoconfigure.filter.TypeExcludeFiltersContextCustomizer@68e614b, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@312191ab, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizer@57eda880, [ImportsContextCustomizer@1ed5cb12 key = [org.springframework.boot.autoconfigure.task.TaskExecutionAutoConfiguration, org.springframework.boot.autoconfigure.cache.CacheAutoConfiguration, org.springframework.boot.autoconfigure.web.servlet.HttpEncodingAutoConfiguration, org.springframework.boot.autoconfigure.validation.ValidationAutoConfiguration, org.springframework.boot.autoconfigure.context.MessageSourceAutoConfiguration, org.springframework.boot.autoconfigure.hateoas.HypermediaAutoConfiguration, org.springframework.boot.autoconfigure.jackson.JacksonAutoConfiguration, org.springframework.boot.autoconfigure.data.web.SpringDataWebAutoConfiguration, org.springframework.boot.test.autoconfigure.web.reactive.WebTestClientAutoConfiguration, org.springframework.boot.autoconfigure.web.servlet.error.ErrorMvcAutoConfiguration, org.springframework.boot.test.autoconfigure.web.servlet.MockMvcAutoConfiguration, org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration, org.springframework.boot.autoconfigure.security.servlet.SecurityFilterAutoConfiguration, org.springframework.boot.autoconfigure.http.HttpMessageConvertersAutoConfiguration, org.springframework.boot.autoconfigure.security.oauth2.client.servlet.OAuth2ClientAutoConfiguration, org.springframework.boot.test.autoconfigure.web.servlet.MockMvcSecurityConfiguration, org.springframework.boot.test.autoconfigure.web.servlet.MockMvcWebClientAutoConfiguration, org.springframework.boot.test.autoconfigure.web.servlet.MockMvcWebDriverAutoConfiguration, org.springframework.boot.autoconfigure.thymeleaf.ThymeleafAutoConfiguration, org.springframework.boot.autoconfigure.gson.GsonAutoConfiguration, org.springframework.boot.autoconfigure.jsonb.JsonbAutoConfiguration, org.springframework.boot.autoconfigure.freemarker.FreeMarkerAutoConfiguration, org.springframework.boot.autoconfigure.web.servlet.WebMvcAutoConfiguration, org.springframework.boot.autoconfigure.security.servlet.UserDetailsServiceAutoConfiguration, org.springframework.boot.autoconfigure.security.oauth2.resource.servlet.OAuth2ResourceServerAutoConfiguration, org.springframework.boot.autoconfigure.groovy.template.GroovyTemplateAutoConfiguration, org.springframework.boot.autoconfigure.mustache.MustacheAutoConfiguration]], org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@5af3a0f, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@72cf2de5, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@395a3a75, org.springframework.boot.test.web.reactor.netty.DisableReactorResourceFactoryGlobalResourcesContextCustomizerFactory$DisableReactorResourceFactoryGlobalResourcesContextCustomizerCustomizer@47db5fa5, org.springframework.boot.test.context.SpringBootTestAnnotation@4f74f1a8], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:180) ~[spring-test-6.1.14.jar:6.1.14] + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:130) ~[spring-test-6.1.14.jar:6.1.14] + at org.springframework.boot.test.mock.mockito.MockitoTestExecutionListener.postProcessFields(MockitoTestExecutionListener.java:122) ~[spring-boot-test-3.3.5.jar:3.3.5] + at org.springframework.boot.test.mock.mockito.MockitoTestExecutionListener.injectFields(MockitoTestExecutionListener.java:106) ~[spring-boot-test-3.3.5.jar:3.3.5] + at org.springframework.boot.test.mock.mockito.MockitoTestExecutionListener.prepareTestInstance(MockitoTestExecutionListener.java:63) ~[spring-boot-test-3.3.5.jar:3.3.5] + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:260) ~[spring-test-6.1.14.jar:6.1.14] + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:163) ~[spring-test-6.1.14.jar:6.1.14] + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:378) ~[junit-jupiter-engine-5.10.5.jar:5.10.5] + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:383) ~[junit-jupiter-engine-5.10.5.jar:5.10.5] + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:378) ~[junit-jupiter-engine-5.10.5.jar:5.10.5] + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:215) ~[na:na] + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:197) ~[na:na] + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1709) ~[na:na] + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:570) ~[na:na] + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:560) ~[na:na] + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:315) ~[na:na] + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) ~[na:na] + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) ~[na:na] + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:807) ~[na:na] + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:377) ~[junit-jupiter-engine-5.10.5.jar:5.10.5] + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:290) ~[junit-jupiter-engine-5.10.5.jar:5.10.5] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:289) ~[junit-jupiter-engine-5.10.5.jar:5.10.5] + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:279) ~[junit-jupiter-engine-5.10.5.jar:5.10.5] + at java.base/java.util.Optional.orElseGet(Optional.java:364) ~[na:na] + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:278) ~[junit-jupiter-engine-5.10.5.jar:5.10.5] + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) ~[junit-jupiter-engine-5.10.5.jar:5.10.5] + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:106) ~[junit-jupiter-engine-5.10.5.jar:5.10.5] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:105) ~[junit-jupiter-engine-5.10.5.jar:5.10.5] + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:69) ~[junit-jupiter-engine-5.10.5.jar:5.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:128) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:128) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at java.base/java.util.ArrayList.forEach(ArrayList.java:1597) ~[na:na] + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:160) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:146) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:144) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:143) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:100) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at java.base/java.util.ArrayList.forEach(ArrayList.java:1597) ~[na:na] + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:160) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:146) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:144) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:143) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:100) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) ~[junit-platform-launcher-1.8.2.jar:1.8.2] + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) ~[junit-platform-launcher-1.8.2.jar:1.8.2] + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) ~[junit-platform-launcher-1.8.2.jar:1.8.2] + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) ~[junit-platform-launcher-1.8.2.jar:1.8.2] + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) ~[junit-platform-launcher-1.8.2.jar:1.8.2] + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) ~[junit-platform-launcher-1.8.2.jar:1.8.2] + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) ~[junit-platform-launcher-1.8.2.jar:1.8.2] + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) ~[junit-platform-launcher-1.8.2.jar:1.8.2] + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) ~[na:na] + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) ~[na:na] + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) ~[na:na] + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) ~[na:na] + at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103) ~[na:na] + at java.base/java.lang.reflect.Method.invoke(Method.java:580) ~[na:na] + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) ~[na:na] + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) ~[na:na] + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) ~[na:na] + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) ~[na:na] + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) ~[na:na] + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) ~[na:na] + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) ~[na:na] + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) ~[na:na] + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) ~[na:na] + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) ~[na:na] + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:122) ~[na:na] + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:72) ~[na:na] + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) ~[gradle-worker.jar:na] + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) ~[gradle-worker.jar:na] +Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'jpaSharedEM_entityManagerFactory': Cannot resolve reference to bean 'entityManagerFactory' while setting constructor argument + at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:377) ~[spring-beans-6.1.14.jar:6.1.14] + at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:135) ~[spring-beans-6.1.14.jar:6.1.14] + at org.springframework.beans.factory.support.ConstructorResolver.resolveConstructorArguments(ConstructorResolver.java:682) ~[spring-beans-6.1.14.jar:6.1.14] + at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:509) ~[spring-beans-6.1.14.jar:6.1.14] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1355) ~[spring-beans-6.1.14.jar:6.1.14] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1185) ~[spring-beans-6.1.14.jar:6.1.14] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:562) ~[spring-beans-6.1.14.jar:6.1.14] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:522) ~[spring-beans-6.1.14.jar:6.1.14] + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:337) ~[spring-beans-6.1.14.jar:6.1.14] + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) ~[spring-beans-6.1.14.jar:6.1.14] + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:335) ~[spring-beans-6.1.14.jar:6.1.14] + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) ~[spring-beans-6.1.14.jar:6.1.14] + at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:975) ~[spring-beans-6.1.14.jar:6.1.14] + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:971) ~[spring-context-6.1.14.jar:6.1.14] + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:625) ~[spring-context-6.1.14.jar:6.1.14] + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:754) ~[spring-boot-3.3.5.jar:3.3.5] + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:456) ~[spring-boot-3.3.5.jar:3.3.5] + at org.springframework.boot.SpringApplication.run(SpringApplication.java:335) ~[spring-boot-3.3.5.jar:3.3.5] + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) ~[spring-boot-test-3.3.5.jar:3.3.5] + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:58) ~[spring-core-6.1.14.jar:6.1.14] + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:46) ~[spring-core-6.1.14.jar:6.1.14] + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1463) ~[spring-boot-3.3.5.jar:3.3.5] + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:553) ~[spring-boot-test-3.3.5.jar:3.3.5] + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) ~[spring-boot-test-3.3.5.jar:3.3.5] + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) ~[spring-boot-test-3.3.5.jar:3.3.5] + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:225) ~[spring-test-6.1.14.jar:6.1.14] + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:152) ~[spring-test-6.1.14.jar:6.1.14] + ... 85 common frames omitted +Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'entityManagerFactory' available + at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeanDefinition(DefaultListableBeanFactory.java:895) ~[spring-beans-6.1.14.jar:6.1.14] + at org.springframework.beans.factory.support.AbstractBeanFactory.getMergedLocalBeanDefinition(AbstractBeanFactory.java:1362) ~[spring-beans-6.1.14.jar:6.1.14] + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:300) ~[spring-beans-6.1.14.jar:6.1.14] + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) ~[spring-beans-6.1.14.jar:6.1.14] + at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:365) ~[spring-beans-6.1.14.jar:6.1.14] + ... 111 common frames omitted +2025-10-29 10:42:45 [Test worker] WARN o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.boot.test.mock.mockito.MockitoTestExecutionListener] to prepare test instance [com.unicorn.hgzero.stt.controller.RecordingControllerTest@35982083] +java.lang.IllegalStateException: ApplicationContext failure threshold (1) exceeded: skipping repeated attempt to load context for [WebMergedContextConfiguration@390645a testClass = com.unicorn.hgzero.stt.controller.RecordingControllerTest, locations = [], classes = [com.unicorn.hgzero.stt.SttApplication], contextInitializerClasses = [], activeProfiles = [], propertySourceDescriptors = [], propertySourceProperties = ["org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.OnFailureConditionReportContextCustomizerFactory$OnFailureConditionReportContextCustomizer@4da602fc, org.springframework.boot.test.autoconfigure.OverrideAutoConfigurationContextCustomizerFactory$DisableAutoConfigurationContextCustomizer@30e4cf5e, org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@1f, org.springframework.boot.test.autoconfigure.filter.TypeExcludeFiltersContextCustomizer@68e614b, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@312191ab, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizer@57eda880, [ImportsContextCustomizer@1ed5cb12 key = [org.springframework.boot.autoconfigure.task.TaskExecutionAutoConfiguration, org.springframework.boot.autoconfigure.cache.CacheAutoConfiguration, org.springframework.boot.autoconfigure.web.servlet.HttpEncodingAutoConfiguration, org.springframework.boot.autoconfigure.validation.ValidationAutoConfiguration, org.springframework.boot.autoconfigure.context.MessageSourceAutoConfiguration, org.springframework.boot.autoconfigure.hateoas.HypermediaAutoConfiguration, org.springframework.boot.autoconfigure.jackson.JacksonAutoConfiguration, org.springframework.boot.autoconfigure.data.web.SpringDataWebAutoConfiguration, org.springframework.boot.test.autoconfigure.web.reactive.WebTestClientAutoConfiguration, org.springframework.boot.autoconfigure.web.servlet.error.ErrorMvcAutoConfiguration, org.springframework.boot.test.autoconfigure.web.servlet.MockMvcAutoConfiguration, org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration, org.springframework.boot.autoconfigure.security.servlet.SecurityFilterAutoConfiguration, org.springframework.boot.autoconfigure.http.HttpMessageConvertersAutoConfiguration, org.springframework.boot.autoconfigure.security.oauth2.client.servlet.OAuth2ClientAutoConfiguration, org.springframework.boot.test.autoconfigure.web.servlet.MockMvcSecurityConfiguration, org.springframework.boot.test.autoconfigure.web.servlet.MockMvcWebClientAutoConfiguration, org.springframework.boot.test.autoconfigure.web.servlet.MockMvcWebDriverAutoConfiguration, org.springframework.boot.autoconfigure.thymeleaf.ThymeleafAutoConfiguration, org.springframework.boot.autoconfigure.gson.GsonAutoConfiguration, org.springframework.boot.autoconfigure.jsonb.JsonbAutoConfiguration, org.springframework.boot.autoconfigure.freemarker.FreeMarkerAutoConfiguration, org.springframework.boot.autoconfigure.web.servlet.WebMvcAutoConfiguration, org.springframework.boot.autoconfigure.security.servlet.UserDetailsServiceAutoConfiguration, org.springframework.boot.autoconfigure.security.oauth2.resource.servlet.OAuth2ResourceServerAutoConfiguration, org.springframework.boot.autoconfigure.groovy.template.GroovyTemplateAutoConfiguration, org.springframework.boot.autoconfigure.mustache.MustacheAutoConfiguration]], org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@5af3a0f, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@72cf2de5, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@395a3a75, org.springframework.boot.test.web.reactor.netty.DisableReactorResourceFactoryGlobalResourcesContextCustomizerFactory$DisableReactorResourceFactoryGlobalResourcesContextCustomizerCustomizer@47db5fa5, org.springframework.boot.test.context.SpringBootTestAnnotation@4f74f1a8], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:145) ~[spring-test-6.1.14.jar:6.1.14] + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:130) ~[spring-test-6.1.14.jar:6.1.14] + at org.springframework.boot.test.mock.mockito.MockitoTestExecutionListener.postProcessFields(MockitoTestExecutionListener.java:122) ~[spring-boot-test-3.3.5.jar:3.3.5] + at org.springframework.boot.test.mock.mockito.MockitoTestExecutionListener.injectFields(MockitoTestExecutionListener.java:106) ~[spring-boot-test-3.3.5.jar:3.3.5] + at org.springframework.boot.test.mock.mockito.MockitoTestExecutionListener.prepareTestInstance(MockitoTestExecutionListener.java:63) ~[spring-boot-test-3.3.5.jar:3.3.5] + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:260) ~[spring-test-6.1.14.jar:6.1.14] + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:163) ~[spring-test-6.1.14.jar:6.1.14] + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:378) ~[junit-jupiter-engine-5.10.5.jar:5.10.5] + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:383) ~[junit-jupiter-engine-5.10.5.jar:5.10.5] + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:378) ~[junit-jupiter-engine-5.10.5.jar:5.10.5] + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:215) ~[na:na] + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:197) ~[na:na] + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1709) ~[na:na] + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:570) ~[na:na] + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:560) ~[na:na] + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:315) ~[na:na] + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) ~[na:na] + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) ~[na:na] + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:807) ~[na:na] + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:377) ~[junit-jupiter-engine-5.10.5.jar:5.10.5] + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:290) ~[junit-jupiter-engine-5.10.5.jar:5.10.5] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:289) ~[junit-jupiter-engine-5.10.5.jar:5.10.5] + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:279) ~[junit-jupiter-engine-5.10.5.jar:5.10.5] + at java.base/java.util.Optional.orElseGet(Optional.java:364) ~[na:na] + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:278) ~[junit-jupiter-engine-5.10.5.jar:5.10.5] + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) ~[junit-jupiter-engine-5.10.5.jar:5.10.5] + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:106) ~[junit-jupiter-engine-5.10.5.jar:5.10.5] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:105) ~[junit-jupiter-engine-5.10.5.jar:5.10.5] + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:69) ~[junit-jupiter-engine-5.10.5.jar:5.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:128) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:128) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at java.base/java.util.ArrayList.forEach(ArrayList.java:1597) ~[na:na] + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:160) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:146) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:144) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:143) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:100) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at java.base/java.util.ArrayList.forEach(ArrayList.java:1597) ~[na:na] + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:160) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:146) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:144) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:143) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:100) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) ~[junit-platform-launcher-1.8.2.jar:1.8.2] + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) ~[junit-platform-launcher-1.8.2.jar:1.8.2] + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) ~[junit-platform-launcher-1.8.2.jar:1.8.2] + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) ~[junit-platform-launcher-1.8.2.jar:1.8.2] + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) ~[junit-platform-launcher-1.8.2.jar:1.8.2] + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) ~[junit-platform-launcher-1.8.2.jar:1.8.2] + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) ~[junit-platform-launcher-1.8.2.jar:1.8.2] + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) ~[junit-platform-launcher-1.8.2.jar:1.8.2] + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) ~[na:na] + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) ~[na:na] + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) ~[na:na] + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) ~[na:na] + at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103) ~[na:na] + at java.base/java.lang.reflect.Method.invoke(Method.java:580) ~[na:na] + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) ~[na:na] + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) ~[na:na] + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) ~[na:na] + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) ~[na:na] + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) ~[na:na] + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) ~[na:na] + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) ~[na:na] + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) ~[na:na] + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) ~[na:na] + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) ~[na:na] + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:122) ~[na:na] + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:72) ~[na:na] + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) ~[gradle-worker.jar:na] + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) ~[gradle-worker.jar:na] +2025-10-29 10:42:45 [Test worker] WARN o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.boot.test.mock.mockito.MockitoTestExecutionListener] to prepare test instance [com.unicorn.hgzero.stt.controller.RecordingControllerTest@6378d7a1] +java.lang.IllegalStateException: ApplicationContext failure threshold (1) exceeded: skipping repeated attempt to load context for [WebMergedContextConfiguration@390645a testClass = com.unicorn.hgzero.stt.controller.RecordingControllerTest, locations = [], classes = [com.unicorn.hgzero.stt.SttApplication], contextInitializerClasses = [], activeProfiles = [], propertySourceDescriptors = [], propertySourceProperties = ["org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.OnFailureConditionReportContextCustomizerFactory$OnFailureConditionReportContextCustomizer@4da602fc, org.springframework.boot.test.autoconfigure.OverrideAutoConfigurationContextCustomizerFactory$DisableAutoConfigurationContextCustomizer@30e4cf5e, org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@1f, org.springframework.boot.test.autoconfigure.filter.TypeExcludeFiltersContextCustomizer@68e614b, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@312191ab, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizer@57eda880, [ImportsContextCustomizer@1ed5cb12 key = [org.springframework.boot.autoconfigure.task.TaskExecutionAutoConfiguration, org.springframework.boot.autoconfigure.cache.CacheAutoConfiguration, org.springframework.boot.autoconfigure.web.servlet.HttpEncodingAutoConfiguration, org.springframework.boot.autoconfigure.validation.ValidationAutoConfiguration, org.springframework.boot.autoconfigure.context.MessageSourceAutoConfiguration, org.springframework.boot.autoconfigure.hateoas.HypermediaAutoConfiguration, org.springframework.boot.autoconfigure.jackson.JacksonAutoConfiguration, org.springframework.boot.autoconfigure.data.web.SpringDataWebAutoConfiguration, org.springframework.boot.test.autoconfigure.web.reactive.WebTestClientAutoConfiguration, org.springframework.boot.autoconfigure.web.servlet.error.ErrorMvcAutoConfiguration, org.springframework.boot.test.autoconfigure.web.servlet.MockMvcAutoConfiguration, org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration, org.springframework.boot.autoconfigure.security.servlet.SecurityFilterAutoConfiguration, org.springframework.boot.autoconfigure.http.HttpMessageConvertersAutoConfiguration, org.springframework.boot.autoconfigure.security.oauth2.client.servlet.OAuth2ClientAutoConfiguration, org.springframework.boot.test.autoconfigure.web.servlet.MockMvcSecurityConfiguration, org.springframework.boot.test.autoconfigure.web.servlet.MockMvcWebClientAutoConfiguration, org.springframework.boot.test.autoconfigure.web.servlet.MockMvcWebDriverAutoConfiguration, org.springframework.boot.autoconfigure.thymeleaf.ThymeleafAutoConfiguration, org.springframework.boot.autoconfigure.gson.GsonAutoConfiguration, org.springframework.boot.autoconfigure.jsonb.JsonbAutoConfiguration, org.springframework.boot.autoconfigure.freemarker.FreeMarkerAutoConfiguration, org.springframework.boot.autoconfigure.web.servlet.WebMvcAutoConfiguration, org.springframework.boot.autoconfigure.security.servlet.UserDetailsServiceAutoConfiguration, org.springframework.boot.autoconfigure.security.oauth2.resource.servlet.OAuth2ResourceServerAutoConfiguration, org.springframework.boot.autoconfigure.groovy.template.GroovyTemplateAutoConfiguration, org.springframework.boot.autoconfigure.mustache.MustacheAutoConfiguration]], org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@5af3a0f, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@72cf2de5, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@395a3a75, org.springframework.boot.test.web.reactor.netty.DisableReactorResourceFactoryGlobalResourcesContextCustomizerFactory$DisableReactorResourceFactoryGlobalResourcesContextCustomizerCustomizer@47db5fa5, org.springframework.boot.test.context.SpringBootTestAnnotation@4f74f1a8], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:145) ~[spring-test-6.1.14.jar:6.1.14] + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:130) ~[spring-test-6.1.14.jar:6.1.14] + at org.springframework.boot.test.mock.mockito.MockitoTestExecutionListener.postProcessFields(MockitoTestExecutionListener.java:122) ~[spring-boot-test-3.3.5.jar:3.3.5] + at org.springframework.boot.test.mock.mockito.MockitoTestExecutionListener.injectFields(MockitoTestExecutionListener.java:106) ~[spring-boot-test-3.3.5.jar:3.3.5] + at org.springframework.boot.test.mock.mockito.MockitoTestExecutionListener.prepareTestInstance(MockitoTestExecutionListener.java:63) ~[spring-boot-test-3.3.5.jar:3.3.5] + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:260) ~[spring-test-6.1.14.jar:6.1.14] + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:163) ~[spring-test-6.1.14.jar:6.1.14] + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:378) ~[junit-jupiter-engine-5.10.5.jar:5.10.5] + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:383) ~[junit-jupiter-engine-5.10.5.jar:5.10.5] + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:378) ~[junit-jupiter-engine-5.10.5.jar:5.10.5] + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:215) ~[na:na] + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:197) ~[na:na] + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1709) ~[na:na] + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:570) ~[na:na] + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:560) ~[na:na] + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:315) ~[na:na] + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) ~[na:na] + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) ~[na:na] + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:807) ~[na:na] + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:377) ~[junit-jupiter-engine-5.10.5.jar:5.10.5] + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:290) ~[junit-jupiter-engine-5.10.5.jar:5.10.5] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:289) ~[junit-jupiter-engine-5.10.5.jar:5.10.5] + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:279) ~[junit-jupiter-engine-5.10.5.jar:5.10.5] + at java.base/java.util.Optional.orElseGet(Optional.java:364) ~[na:na] + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:278) ~[junit-jupiter-engine-5.10.5.jar:5.10.5] + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) ~[junit-jupiter-engine-5.10.5.jar:5.10.5] + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:106) ~[junit-jupiter-engine-5.10.5.jar:5.10.5] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:105) ~[junit-jupiter-engine-5.10.5.jar:5.10.5] + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:69) ~[junit-jupiter-engine-5.10.5.jar:5.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:128) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:128) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at java.base/java.util.ArrayList.forEach(ArrayList.java:1597) ~[na:na] + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:160) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:146) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:144) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:143) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:100) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at java.base/java.util.ArrayList.forEach(ArrayList.java:1597) ~[na:na] + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:160) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:146) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:144) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:143) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:100) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) ~[junit-platform-launcher-1.8.2.jar:1.8.2] + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) ~[junit-platform-launcher-1.8.2.jar:1.8.2] + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) ~[junit-platform-launcher-1.8.2.jar:1.8.2] + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) ~[junit-platform-launcher-1.8.2.jar:1.8.2] + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) ~[junit-platform-launcher-1.8.2.jar:1.8.2] + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) ~[junit-platform-launcher-1.8.2.jar:1.8.2] + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) ~[junit-platform-launcher-1.8.2.jar:1.8.2] + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) ~[junit-platform-launcher-1.8.2.jar:1.8.2] + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) ~[na:na] + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) ~[na:na] + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) ~[na:na] + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) ~[na:na] + at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103) ~[na:na] + at java.base/java.lang.reflect.Method.invoke(Method.java:580) ~[na:na] + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) ~[na:na] + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) ~[na:na] + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) ~[na:na] + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) ~[na:na] + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) ~[na:na] + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) ~[na:na] + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) ~[na:na] + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) ~[na:na] + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) ~[na:na] + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) ~[na:na] + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:122) ~[na:na] + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:72) ~[na:na] + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) ~[gradle-worker.jar:na] + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) ~[gradle-worker.jar:na] +2025-10-29 10:42:45 [Test worker] WARN o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.boot.test.mock.mockito.MockitoTestExecutionListener] to prepare test instance [com.unicorn.hgzero.stt.controller.RecordingControllerTest@5fe8810d] +java.lang.IllegalStateException: ApplicationContext failure threshold (1) exceeded: skipping repeated attempt to load context for [WebMergedContextConfiguration@390645a testClass = com.unicorn.hgzero.stt.controller.RecordingControllerTest, locations = [], classes = [com.unicorn.hgzero.stt.SttApplication], contextInitializerClasses = [], activeProfiles = [], propertySourceDescriptors = [], propertySourceProperties = ["org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.OnFailureConditionReportContextCustomizerFactory$OnFailureConditionReportContextCustomizer@4da602fc, org.springframework.boot.test.autoconfigure.OverrideAutoConfigurationContextCustomizerFactory$DisableAutoConfigurationContextCustomizer@30e4cf5e, org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@1f, org.springframework.boot.test.autoconfigure.filter.TypeExcludeFiltersContextCustomizer@68e614b, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@312191ab, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizer@57eda880, [ImportsContextCustomizer@1ed5cb12 key = [org.springframework.boot.autoconfigure.task.TaskExecutionAutoConfiguration, org.springframework.boot.autoconfigure.cache.CacheAutoConfiguration, org.springframework.boot.autoconfigure.web.servlet.HttpEncodingAutoConfiguration, org.springframework.boot.autoconfigure.validation.ValidationAutoConfiguration, org.springframework.boot.autoconfigure.context.MessageSourceAutoConfiguration, org.springframework.boot.autoconfigure.hateoas.HypermediaAutoConfiguration, org.springframework.boot.autoconfigure.jackson.JacksonAutoConfiguration, org.springframework.boot.autoconfigure.data.web.SpringDataWebAutoConfiguration, org.springframework.boot.test.autoconfigure.web.reactive.WebTestClientAutoConfiguration, org.springframework.boot.autoconfigure.web.servlet.error.ErrorMvcAutoConfiguration, org.springframework.boot.test.autoconfigure.web.servlet.MockMvcAutoConfiguration, org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration, org.springframework.boot.autoconfigure.security.servlet.SecurityFilterAutoConfiguration, org.springframework.boot.autoconfigure.http.HttpMessageConvertersAutoConfiguration, org.springframework.boot.autoconfigure.security.oauth2.client.servlet.OAuth2ClientAutoConfiguration, org.springframework.boot.test.autoconfigure.web.servlet.MockMvcSecurityConfiguration, org.springframework.boot.test.autoconfigure.web.servlet.MockMvcWebClientAutoConfiguration, org.springframework.boot.test.autoconfigure.web.servlet.MockMvcWebDriverAutoConfiguration, org.springframework.boot.autoconfigure.thymeleaf.ThymeleafAutoConfiguration, org.springframework.boot.autoconfigure.gson.GsonAutoConfiguration, org.springframework.boot.autoconfigure.jsonb.JsonbAutoConfiguration, org.springframework.boot.autoconfigure.freemarker.FreeMarkerAutoConfiguration, org.springframework.boot.autoconfigure.web.servlet.WebMvcAutoConfiguration, org.springframework.boot.autoconfigure.security.servlet.UserDetailsServiceAutoConfiguration, org.springframework.boot.autoconfigure.security.oauth2.resource.servlet.OAuth2ResourceServerAutoConfiguration, org.springframework.boot.autoconfigure.groovy.template.GroovyTemplateAutoConfiguration, org.springframework.boot.autoconfigure.mustache.MustacheAutoConfiguration]], org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@5af3a0f, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@72cf2de5, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@395a3a75, org.springframework.boot.test.web.reactor.netty.DisableReactorResourceFactoryGlobalResourcesContextCustomizerFactory$DisableReactorResourceFactoryGlobalResourcesContextCustomizerCustomizer@47db5fa5, org.springframework.boot.test.context.SpringBootTestAnnotation@4f74f1a8], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:145) ~[spring-test-6.1.14.jar:6.1.14] + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:130) ~[spring-test-6.1.14.jar:6.1.14] + at org.springframework.boot.test.mock.mockito.MockitoTestExecutionListener.postProcessFields(MockitoTestExecutionListener.java:122) ~[spring-boot-test-3.3.5.jar:3.3.5] + at org.springframework.boot.test.mock.mockito.MockitoTestExecutionListener.injectFields(MockitoTestExecutionListener.java:106) ~[spring-boot-test-3.3.5.jar:3.3.5] + at org.springframework.boot.test.mock.mockito.MockitoTestExecutionListener.prepareTestInstance(MockitoTestExecutionListener.java:63) ~[spring-boot-test-3.3.5.jar:3.3.5] + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:260) ~[spring-test-6.1.14.jar:6.1.14] + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:163) ~[spring-test-6.1.14.jar:6.1.14] + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:378) ~[junit-jupiter-engine-5.10.5.jar:5.10.5] + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:383) ~[junit-jupiter-engine-5.10.5.jar:5.10.5] + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:378) ~[junit-jupiter-engine-5.10.5.jar:5.10.5] + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:215) ~[na:na] + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:197) ~[na:na] + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1709) ~[na:na] + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:570) ~[na:na] + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:560) ~[na:na] + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:315) ~[na:na] + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) ~[na:na] + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) ~[na:na] + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:807) ~[na:na] + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:377) ~[junit-jupiter-engine-5.10.5.jar:5.10.5] + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:290) ~[junit-jupiter-engine-5.10.5.jar:5.10.5] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:289) ~[junit-jupiter-engine-5.10.5.jar:5.10.5] + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:279) ~[junit-jupiter-engine-5.10.5.jar:5.10.5] + at java.base/java.util.Optional.orElseGet(Optional.java:364) ~[na:na] + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:278) ~[junit-jupiter-engine-5.10.5.jar:5.10.5] + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) ~[junit-jupiter-engine-5.10.5.jar:5.10.5] + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:106) ~[junit-jupiter-engine-5.10.5.jar:5.10.5] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:105) ~[junit-jupiter-engine-5.10.5.jar:5.10.5] + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:69) ~[junit-jupiter-engine-5.10.5.jar:5.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:128) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:128) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at java.base/java.util.ArrayList.forEach(ArrayList.java:1597) ~[na:na] + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:160) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:146) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:144) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:143) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:100) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at java.base/java.util.ArrayList.forEach(ArrayList.java:1597) ~[na:na] + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:160) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:146) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:144) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:143) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:100) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) ~[junit-platform-launcher-1.8.2.jar:1.8.2] + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) ~[junit-platform-launcher-1.8.2.jar:1.8.2] + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) ~[junit-platform-launcher-1.8.2.jar:1.8.2] + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) ~[junit-platform-launcher-1.8.2.jar:1.8.2] + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) ~[junit-platform-launcher-1.8.2.jar:1.8.2] + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) ~[junit-platform-launcher-1.8.2.jar:1.8.2] + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) ~[junit-platform-launcher-1.8.2.jar:1.8.2] + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) ~[junit-platform-launcher-1.8.2.jar:1.8.2] + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) ~[na:na] + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) ~[na:na] + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) ~[na:na] + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) ~[na:na] + at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103) ~[na:na] + at java.base/java.lang.reflect.Method.invoke(Method.java:580) ~[na:na] + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) ~[na:na] + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) ~[na:na] + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) ~[na:na] + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) ~[na:na] + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) ~[na:na] + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) ~[na:na] + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) ~[na:na] + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) ~[na:na] + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) ~[na:na] + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) ~[na:na] + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:122) ~[na:na] + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:72) ~[na:na] + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) ~[gradle-worker.jar:na] + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) ~[gradle-worker.jar:na] +2025-10-29 10:42:45 [Test worker] WARN o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.boot.test.mock.mockito.MockitoTestExecutionListener] to prepare test instance [com.unicorn.hgzero.stt.controller.RecordingControllerTest@5a4736b8] +java.lang.IllegalStateException: ApplicationContext failure threshold (1) exceeded: skipping repeated attempt to load context for [WebMergedContextConfiguration@390645a testClass = com.unicorn.hgzero.stt.controller.RecordingControllerTest, locations = [], classes = [com.unicorn.hgzero.stt.SttApplication], contextInitializerClasses = [], activeProfiles = [], propertySourceDescriptors = [], propertySourceProperties = ["org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.OnFailureConditionReportContextCustomizerFactory$OnFailureConditionReportContextCustomizer@4da602fc, org.springframework.boot.test.autoconfigure.OverrideAutoConfigurationContextCustomizerFactory$DisableAutoConfigurationContextCustomizer@30e4cf5e, org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@1f, org.springframework.boot.test.autoconfigure.filter.TypeExcludeFiltersContextCustomizer@68e614b, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@312191ab, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizer@57eda880, [ImportsContextCustomizer@1ed5cb12 key = [org.springframework.boot.autoconfigure.task.TaskExecutionAutoConfiguration, org.springframework.boot.autoconfigure.cache.CacheAutoConfiguration, org.springframework.boot.autoconfigure.web.servlet.HttpEncodingAutoConfiguration, org.springframework.boot.autoconfigure.validation.ValidationAutoConfiguration, org.springframework.boot.autoconfigure.context.MessageSourceAutoConfiguration, org.springframework.boot.autoconfigure.hateoas.HypermediaAutoConfiguration, org.springframework.boot.autoconfigure.jackson.JacksonAutoConfiguration, org.springframework.boot.autoconfigure.data.web.SpringDataWebAutoConfiguration, org.springframework.boot.test.autoconfigure.web.reactive.WebTestClientAutoConfiguration, org.springframework.boot.autoconfigure.web.servlet.error.ErrorMvcAutoConfiguration, org.springframework.boot.test.autoconfigure.web.servlet.MockMvcAutoConfiguration, org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration, org.springframework.boot.autoconfigure.security.servlet.SecurityFilterAutoConfiguration, org.springframework.boot.autoconfigure.http.HttpMessageConvertersAutoConfiguration, org.springframework.boot.autoconfigure.security.oauth2.client.servlet.OAuth2ClientAutoConfiguration, org.springframework.boot.test.autoconfigure.web.servlet.MockMvcSecurityConfiguration, org.springframework.boot.test.autoconfigure.web.servlet.MockMvcWebClientAutoConfiguration, org.springframework.boot.test.autoconfigure.web.servlet.MockMvcWebDriverAutoConfiguration, org.springframework.boot.autoconfigure.thymeleaf.ThymeleafAutoConfiguration, org.springframework.boot.autoconfigure.gson.GsonAutoConfiguration, org.springframework.boot.autoconfigure.jsonb.JsonbAutoConfiguration, org.springframework.boot.autoconfigure.freemarker.FreeMarkerAutoConfiguration, org.springframework.boot.autoconfigure.web.servlet.WebMvcAutoConfiguration, org.springframework.boot.autoconfigure.security.servlet.UserDetailsServiceAutoConfiguration, org.springframework.boot.autoconfigure.security.oauth2.resource.servlet.OAuth2ResourceServerAutoConfiguration, org.springframework.boot.autoconfigure.groovy.template.GroovyTemplateAutoConfiguration, org.springframework.boot.autoconfigure.mustache.MustacheAutoConfiguration]], org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@5af3a0f, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@72cf2de5, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@395a3a75, org.springframework.boot.test.web.reactor.netty.DisableReactorResourceFactoryGlobalResourcesContextCustomizerFactory$DisableReactorResourceFactoryGlobalResourcesContextCustomizerCustomizer@47db5fa5, org.springframework.boot.test.context.SpringBootTestAnnotation@4f74f1a8], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:145) ~[spring-test-6.1.14.jar:6.1.14] + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:130) ~[spring-test-6.1.14.jar:6.1.14] + at org.springframework.boot.test.mock.mockito.MockitoTestExecutionListener.postProcessFields(MockitoTestExecutionListener.java:122) ~[spring-boot-test-3.3.5.jar:3.3.5] + at org.springframework.boot.test.mock.mockito.MockitoTestExecutionListener.injectFields(MockitoTestExecutionListener.java:106) ~[spring-boot-test-3.3.5.jar:3.3.5] + at org.springframework.boot.test.mock.mockito.MockitoTestExecutionListener.prepareTestInstance(MockitoTestExecutionListener.java:63) ~[spring-boot-test-3.3.5.jar:3.3.5] + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:260) ~[spring-test-6.1.14.jar:6.1.14] + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:163) ~[spring-test-6.1.14.jar:6.1.14] + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:378) ~[junit-jupiter-engine-5.10.5.jar:5.10.5] + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:383) ~[junit-jupiter-engine-5.10.5.jar:5.10.5] + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:378) ~[junit-jupiter-engine-5.10.5.jar:5.10.5] + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:215) ~[na:na] + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:197) ~[na:na] + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1709) ~[na:na] + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:570) ~[na:na] + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:560) ~[na:na] + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:315) ~[na:na] + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) ~[na:na] + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) ~[na:na] + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:807) ~[na:na] + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:377) ~[junit-jupiter-engine-5.10.5.jar:5.10.5] + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:290) ~[junit-jupiter-engine-5.10.5.jar:5.10.5] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:289) ~[junit-jupiter-engine-5.10.5.jar:5.10.5] + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:279) ~[junit-jupiter-engine-5.10.5.jar:5.10.5] + at java.base/java.util.Optional.orElseGet(Optional.java:364) ~[na:na] + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:278) ~[junit-jupiter-engine-5.10.5.jar:5.10.5] + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) ~[junit-jupiter-engine-5.10.5.jar:5.10.5] + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:106) ~[junit-jupiter-engine-5.10.5.jar:5.10.5] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:105) ~[junit-jupiter-engine-5.10.5.jar:5.10.5] + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:69) ~[junit-jupiter-engine-5.10.5.jar:5.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:128) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:128) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at java.base/java.util.ArrayList.forEach(ArrayList.java:1597) ~[na:na] + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:160) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:146) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:144) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:143) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:100) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at java.base/java.util.ArrayList.forEach(ArrayList.java:1597) ~[na:na] + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:160) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:146) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:144) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:143) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:100) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) ~[junit-platform-launcher-1.8.2.jar:1.8.2] + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) ~[junit-platform-launcher-1.8.2.jar:1.8.2] + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) ~[junit-platform-launcher-1.8.2.jar:1.8.2] + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) ~[junit-platform-launcher-1.8.2.jar:1.8.2] + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) ~[junit-platform-launcher-1.8.2.jar:1.8.2] + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) ~[junit-platform-launcher-1.8.2.jar:1.8.2] + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) ~[junit-platform-launcher-1.8.2.jar:1.8.2] + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) ~[junit-platform-launcher-1.8.2.jar:1.8.2] + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) ~[na:na] + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) ~[na:na] + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) ~[na:na] + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) ~[na:na] + at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103) ~[na:na] + at java.base/java.lang.reflect.Method.invoke(Method.java:580) ~[na:na] + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) ~[na:na] + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) ~[na:na] + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) ~[na:na] + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) ~[na:na] + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) ~[na:na] + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) ~[na:na] + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) ~[na:na] + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) ~[na:na] + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) ~[na:na] + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) ~[na:na] + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:122) ~[na:na] + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:72) ~[na:na] + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) ~[gradle-worker.jar:na] + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) ~[gradle-worker.jar:na] +2025-10-29 10:42:45 [Test worker] WARN o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.boot.test.mock.mockito.MockitoTestExecutionListener] to prepare test instance [com.unicorn.hgzero.stt.controller.RecordingControllerTest@6b102ccf] +java.lang.IllegalStateException: ApplicationContext failure threshold (1) exceeded: skipping repeated attempt to load context for [WebMergedContextConfiguration@390645a testClass = com.unicorn.hgzero.stt.controller.RecordingControllerTest, locations = [], classes = [com.unicorn.hgzero.stt.SttApplication], contextInitializerClasses = [], activeProfiles = [], propertySourceDescriptors = [], propertySourceProperties = ["org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.OnFailureConditionReportContextCustomizerFactory$OnFailureConditionReportContextCustomizer@4da602fc, org.springframework.boot.test.autoconfigure.OverrideAutoConfigurationContextCustomizerFactory$DisableAutoConfigurationContextCustomizer@30e4cf5e, org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@1f, org.springframework.boot.test.autoconfigure.filter.TypeExcludeFiltersContextCustomizer@68e614b, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@312191ab, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizer@57eda880, [ImportsContextCustomizer@1ed5cb12 key = [org.springframework.boot.autoconfigure.task.TaskExecutionAutoConfiguration, org.springframework.boot.autoconfigure.cache.CacheAutoConfiguration, org.springframework.boot.autoconfigure.web.servlet.HttpEncodingAutoConfiguration, org.springframework.boot.autoconfigure.validation.ValidationAutoConfiguration, org.springframework.boot.autoconfigure.context.MessageSourceAutoConfiguration, org.springframework.boot.autoconfigure.hateoas.HypermediaAutoConfiguration, org.springframework.boot.autoconfigure.jackson.JacksonAutoConfiguration, org.springframework.boot.autoconfigure.data.web.SpringDataWebAutoConfiguration, org.springframework.boot.test.autoconfigure.web.reactive.WebTestClientAutoConfiguration, org.springframework.boot.autoconfigure.web.servlet.error.ErrorMvcAutoConfiguration, org.springframework.boot.test.autoconfigure.web.servlet.MockMvcAutoConfiguration, org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration, org.springframework.boot.autoconfigure.security.servlet.SecurityFilterAutoConfiguration, org.springframework.boot.autoconfigure.http.HttpMessageConvertersAutoConfiguration, org.springframework.boot.autoconfigure.security.oauth2.client.servlet.OAuth2ClientAutoConfiguration, org.springframework.boot.test.autoconfigure.web.servlet.MockMvcSecurityConfiguration, org.springframework.boot.test.autoconfigure.web.servlet.MockMvcWebClientAutoConfiguration, org.springframework.boot.test.autoconfigure.web.servlet.MockMvcWebDriverAutoConfiguration, org.springframework.boot.autoconfigure.thymeleaf.ThymeleafAutoConfiguration, org.springframework.boot.autoconfigure.gson.GsonAutoConfiguration, org.springframework.boot.autoconfigure.jsonb.JsonbAutoConfiguration, org.springframework.boot.autoconfigure.freemarker.FreeMarkerAutoConfiguration, org.springframework.boot.autoconfigure.web.servlet.WebMvcAutoConfiguration, org.springframework.boot.autoconfigure.security.servlet.UserDetailsServiceAutoConfiguration, org.springframework.boot.autoconfigure.security.oauth2.resource.servlet.OAuth2ResourceServerAutoConfiguration, org.springframework.boot.autoconfigure.groovy.template.GroovyTemplateAutoConfiguration, org.springframework.boot.autoconfigure.mustache.MustacheAutoConfiguration]], org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@5af3a0f, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@72cf2de5, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@395a3a75, org.springframework.boot.test.web.reactor.netty.DisableReactorResourceFactoryGlobalResourcesContextCustomizerFactory$DisableReactorResourceFactoryGlobalResourcesContextCustomizerCustomizer@47db5fa5, org.springframework.boot.test.context.SpringBootTestAnnotation@4f74f1a8], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:145) ~[spring-test-6.1.14.jar:6.1.14] + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:130) ~[spring-test-6.1.14.jar:6.1.14] + at org.springframework.boot.test.mock.mockito.MockitoTestExecutionListener.postProcessFields(MockitoTestExecutionListener.java:122) ~[spring-boot-test-3.3.5.jar:3.3.5] + at org.springframework.boot.test.mock.mockito.MockitoTestExecutionListener.injectFields(MockitoTestExecutionListener.java:106) ~[spring-boot-test-3.3.5.jar:3.3.5] + at org.springframework.boot.test.mock.mockito.MockitoTestExecutionListener.prepareTestInstance(MockitoTestExecutionListener.java:63) ~[spring-boot-test-3.3.5.jar:3.3.5] + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:260) ~[spring-test-6.1.14.jar:6.1.14] + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:163) ~[spring-test-6.1.14.jar:6.1.14] + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:378) ~[junit-jupiter-engine-5.10.5.jar:5.10.5] + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:383) ~[junit-jupiter-engine-5.10.5.jar:5.10.5] + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:378) ~[junit-jupiter-engine-5.10.5.jar:5.10.5] + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:215) ~[na:na] + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:197) ~[na:na] + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1709) ~[na:na] + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:570) ~[na:na] + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:560) ~[na:na] + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:315) ~[na:na] + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) ~[na:na] + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) ~[na:na] + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:807) ~[na:na] + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:377) ~[junit-jupiter-engine-5.10.5.jar:5.10.5] + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:290) ~[junit-jupiter-engine-5.10.5.jar:5.10.5] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:289) ~[junit-jupiter-engine-5.10.5.jar:5.10.5] + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:279) ~[junit-jupiter-engine-5.10.5.jar:5.10.5] + at java.base/java.util.Optional.orElseGet(Optional.java:364) ~[na:na] + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:278) ~[junit-jupiter-engine-5.10.5.jar:5.10.5] + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) ~[junit-jupiter-engine-5.10.5.jar:5.10.5] + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:106) ~[junit-jupiter-engine-5.10.5.jar:5.10.5] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:105) ~[junit-jupiter-engine-5.10.5.jar:5.10.5] + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:69) ~[junit-jupiter-engine-5.10.5.jar:5.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:128) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:128) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at java.base/java.util.ArrayList.forEach(ArrayList.java:1597) ~[na:na] + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:160) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:146) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:144) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:143) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:100) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at java.base/java.util.ArrayList.forEach(ArrayList.java:1597) ~[na:na] + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:160) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:146) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:144) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:143) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:100) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) ~[junit-platform-launcher-1.8.2.jar:1.8.2] + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) ~[junit-platform-launcher-1.8.2.jar:1.8.2] + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) ~[junit-platform-launcher-1.8.2.jar:1.8.2] + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) ~[junit-platform-launcher-1.8.2.jar:1.8.2] + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) ~[junit-platform-launcher-1.8.2.jar:1.8.2] + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) ~[junit-platform-launcher-1.8.2.jar:1.8.2] + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) ~[junit-platform-launcher-1.8.2.jar:1.8.2] + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) ~[junit-platform-launcher-1.8.2.jar:1.8.2] + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) ~[na:na] + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) ~[na:na] + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) ~[na:na] + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) ~[na:na] + at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103) ~[na:na] + at java.base/java.lang.reflect.Method.invoke(Method.java:580) ~[na:na] + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) ~[na:na] + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) ~[na:na] + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) ~[na:na] + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) ~[na:na] + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) ~[na:na] + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) ~[na:na] + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) ~[na:na] + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) ~[na:na] + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) ~[na:na] + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) ~[na:na] + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:122) ~[na:na] + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:72) ~[na:na] + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) ~[gradle-worker.jar:na] + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) ~[gradle-worker.jar:na] +2025-10-29 10:42:45 [Test worker] INFO o.s.t.c.s.AnnotationConfigContextLoaderUtils - Could not detect default configuration classes for test class [com.unicorn.hgzero.stt.controller.SimpleRecordingControllerTest]: SimpleRecordingControllerTest does not declare any static, non-private, non-final, nested classes annotated with @Configuration. +2025-10-29 10:42:45 [Test worker] INFO o.s.b.t.c.SpringBootTestContextBootstrapper - Found @SpringBootConfiguration com.unicorn.hgzero.stt.SttApplication for test class com.unicorn.hgzero.stt.controller.SimpleRecordingControllerTest +2025-10-29 10:42:45 [Test worker] WARN o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.boot.test.mock.mockito.MockitoTestExecutionListener] to prepare test instance [com.unicorn.hgzero.stt.controller.SimpleRecordingControllerTest@7330574d] +java.lang.IllegalStateException: ApplicationContext failure threshold (1) exceeded: skipping repeated attempt to load context for [WebMergedContextConfiguration@1dde2d1 testClass = com.unicorn.hgzero.stt.controller.SimpleRecordingControllerTest, locations = [], classes = [com.unicorn.hgzero.stt.SttApplication], contextInitializerClasses = [], activeProfiles = [], propertySourceDescriptors = [], propertySourceProperties = ["org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.OnFailureConditionReportContextCustomizerFactory$OnFailureConditionReportContextCustomizer@4da602fc, org.springframework.boot.test.autoconfigure.OverrideAutoConfigurationContextCustomizerFactory$DisableAutoConfigurationContextCustomizer@30e4cf5e, org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@1f, org.springframework.boot.test.autoconfigure.filter.TypeExcludeFiltersContextCustomizer@68e614b, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@312191ab, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizer@57eda880, [ImportsContextCustomizer@47caa1ff key = [org.springframework.boot.autoconfigure.task.TaskExecutionAutoConfiguration, org.springframework.boot.autoconfigure.cache.CacheAutoConfiguration, org.springframework.boot.autoconfigure.web.servlet.HttpEncodingAutoConfiguration, org.springframework.boot.autoconfigure.validation.ValidationAutoConfiguration, org.springframework.boot.autoconfigure.context.MessageSourceAutoConfiguration, org.springframework.boot.autoconfigure.hateoas.HypermediaAutoConfiguration, org.springframework.boot.autoconfigure.jackson.JacksonAutoConfiguration, org.springframework.boot.autoconfigure.data.web.SpringDataWebAutoConfiguration, org.springframework.boot.test.autoconfigure.web.reactive.WebTestClientAutoConfiguration, org.springframework.boot.autoconfigure.web.servlet.error.ErrorMvcAutoConfiguration, org.springframework.boot.test.autoconfigure.web.servlet.MockMvcAutoConfiguration, org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration, org.springframework.boot.autoconfigure.security.servlet.SecurityFilterAutoConfiguration, org.springframework.boot.autoconfigure.http.HttpMessageConvertersAutoConfiguration, org.springframework.boot.autoconfigure.security.oauth2.client.servlet.OAuth2ClientAutoConfiguration, org.springframework.boot.test.autoconfigure.web.servlet.MockMvcSecurityConfiguration, org.springframework.boot.test.autoconfigure.web.servlet.MockMvcWebClientAutoConfiguration, org.springframework.boot.test.autoconfigure.web.servlet.MockMvcWebDriverAutoConfiguration, org.springframework.boot.autoconfigure.thymeleaf.ThymeleafAutoConfiguration, org.springframework.boot.autoconfigure.gson.GsonAutoConfiguration, org.springframework.boot.autoconfigure.jsonb.JsonbAutoConfiguration, org.springframework.boot.autoconfigure.freemarker.FreeMarkerAutoConfiguration, org.springframework.boot.autoconfigure.web.servlet.WebMvcAutoConfiguration, org.springframework.boot.autoconfigure.security.servlet.UserDetailsServiceAutoConfiguration, org.springframework.boot.autoconfigure.security.oauth2.resource.servlet.OAuth2ResourceServerAutoConfiguration, org.springframework.boot.autoconfigure.groovy.template.GroovyTemplateAutoConfiguration, org.springframework.boot.autoconfigure.mustache.MustacheAutoConfiguration]], org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@5af3a0f, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@72cf2de5, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@395a3a75, org.springframework.boot.test.web.reactor.netty.DisableReactorResourceFactoryGlobalResourcesContextCustomizerFactory$DisableReactorResourceFactoryGlobalResourcesContextCustomizerCustomizer@47db5fa5, org.springframework.boot.test.context.SpringBootTestAnnotation@4f74f1a8], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:145) ~[spring-test-6.1.14.jar:6.1.14] + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:130) ~[spring-test-6.1.14.jar:6.1.14] + at org.springframework.boot.test.mock.mockito.MockitoTestExecutionListener.postProcessFields(MockitoTestExecutionListener.java:122) ~[spring-boot-test-3.3.5.jar:3.3.5] + at org.springframework.boot.test.mock.mockito.MockitoTestExecutionListener.injectFields(MockitoTestExecutionListener.java:106) ~[spring-boot-test-3.3.5.jar:3.3.5] + at org.springframework.boot.test.mock.mockito.MockitoTestExecutionListener.prepareTestInstance(MockitoTestExecutionListener.java:63) ~[spring-boot-test-3.3.5.jar:3.3.5] + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:260) ~[spring-test-6.1.14.jar:6.1.14] + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:163) ~[spring-test-6.1.14.jar:6.1.14] + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:378) ~[junit-jupiter-engine-5.10.5.jar:5.10.5] + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:383) ~[junit-jupiter-engine-5.10.5.jar:5.10.5] + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:378) ~[junit-jupiter-engine-5.10.5.jar:5.10.5] + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:215) ~[na:na] + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:197) ~[na:na] + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1709) ~[na:na] + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:570) ~[na:na] + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:560) ~[na:na] + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:315) ~[na:na] + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) ~[na:na] + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) ~[na:na] + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:807) ~[na:na] + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:377) ~[junit-jupiter-engine-5.10.5.jar:5.10.5] + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:290) ~[junit-jupiter-engine-5.10.5.jar:5.10.5] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:289) ~[junit-jupiter-engine-5.10.5.jar:5.10.5] + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:279) ~[junit-jupiter-engine-5.10.5.jar:5.10.5] + at java.base/java.util.Optional.orElseGet(Optional.java:364) ~[na:na] + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:278) ~[junit-jupiter-engine-5.10.5.jar:5.10.5] + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) ~[junit-jupiter-engine-5.10.5.jar:5.10.5] + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:106) ~[junit-jupiter-engine-5.10.5.jar:5.10.5] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:105) ~[junit-jupiter-engine-5.10.5.jar:5.10.5] + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:69) ~[junit-jupiter-engine-5.10.5.jar:5.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:128) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:128) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at java.base/java.util.ArrayList.forEach(ArrayList.java:1597) ~[na:na] + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:160) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:146) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:144) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:143) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:100) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at java.base/java.util.ArrayList.forEach(ArrayList.java:1597) ~[na:na] + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:160) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:146) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:144) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:143) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:100) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) ~[junit-platform-launcher-1.8.2.jar:1.8.2] + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) ~[junit-platform-launcher-1.8.2.jar:1.8.2] + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) ~[junit-platform-launcher-1.8.2.jar:1.8.2] + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) ~[junit-platform-launcher-1.8.2.jar:1.8.2] + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) ~[junit-platform-launcher-1.8.2.jar:1.8.2] + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) ~[junit-platform-launcher-1.8.2.jar:1.8.2] + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) ~[junit-platform-launcher-1.8.2.jar:1.8.2] + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) ~[junit-platform-launcher-1.8.2.jar:1.8.2] + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) ~[na:na] + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) ~[na:na] + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) ~[na:na] + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) ~[na:na] + at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103) ~[na:na] + at java.base/java.lang.reflect.Method.invoke(Method.java:580) ~[na:na] + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) ~[na:na] + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) ~[na:na] + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) ~[na:na] + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) ~[na:na] + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) ~[na:na] + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) ~[na:na] + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) ~[na:na] + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) ~[na:na] + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) ~[na:na] + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) ~[na:na] + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:122) ~[na:na] + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:72) ~[na:na] + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) ~[gradle-worker.jar:na] + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) ~[gradle-worker.jar:na] +2025-10-29 10:42:45 [Test worker] WARN o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.boot.test.mock.mockito.MockitoTestExecutionListener] to prepare test instance [com.unicorn.hgzero.stt.controller.SimpleRecordingControllerTest@34615ef4] +java.lang.IllegalStateException: ApplicationContext failure threshold (1) exceeded: skipping repeated attempt to load context for [WebMergedContextConfiguration@1dde2d1 testClass = com.unicorn.hgzero.stt.controller.SimpleRecordingControllerTest, locations = [], classes = [com.unicorn.hgzero.stt.SttApplication], contextInitializerClasses = [], activeProfiles = [], propertySourceDescriptors = [], propertySourceProperties = ["org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.OnFailureConditionReportContextCustomizerFactory$OnFailureConditionReportContextCustomizer@4da602fc, org.springframework.boot.test.autoconfigure.OverrideAutoConfigurationContextCustomizerFactory$DisableAutoConfigurationContextCustomizer@30e4cf5e, org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@1f, org.springframework.boot.test.autoconfigure.filter.TypeExcludeFiltersContextCustomizer@68e614b, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@312191ab, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizer@57eda880, [ImportsContextCustomizer@47caa1ff key = [org.springframework.boot.autoconfigure.task.TaskExecutionAutoConfiguration, org.springframework.boot.autoconfigure.cache.CacheAutoConfiguration, org.springframework.boot.autoconfigure.web.servlet.HttpEncodingAutoConfiguration, org.springframework.boot.autoconfigure.validation.ValidationAutoConfiguration, org.springframework.boot.autoconfigure.context.MessageSourceAutoConfiguration, org.springframework.boot.autoconfigure.hateoas.HypermediaAutoConfiguration, org.springframework.boot.autoconfigure.jackson.JacksonAutoConfiguration, org.springframework.boot.autoconfigure.data.web.SpringDataWebAutoConfiguration, org.springframework.boot.test.autoconfigure.web.reactive.WebTestClientAutoConfiguration, org.springframework.boot.autoconfigure.web.servlet.error.ErrorMvcAutoConfiguration, org.springframework.boot.test.autoconfigure.web.servlet.MockMvcAutoConfiguration, org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration, org.springframework.boot.autoconfigure.security.servlet.SecurityFilterAutoConfiguration, org.springframework.boot.autoconfigure.http.HttpMessageConvertersAutoConfiguration, org.springframework.boot.autoconfigure.security.oauth2.client.servlet.OAuth2ClientAutoConfiguration, org.springframework.boot.test.autoconfigure.web.servlet.MockMvcSecurityConfiguration, org.springframework.boot.test.autoconfigure.web.servlet.MockMvcWebClientAutoConfiguration, org.springframework.boot.test.autoconfigure.web.servlet.MockMvcWebDriverAutoConfiguration, org.springframework.boot.autoconfigure.thymeleaf.ThymeleafAutoConfiguration, org.springframework.boot.autoconfigure.gson.GsonAutoConfiguration, org.springframework.boot.autoconfigure.jsonb.JsonbAutoConfiguration, org.springframework.boot.autoconfigure.freemarker.FreeMarkerAutoConfiguration, org.springframework.boot.autoconfigure.web.servlet.WebMvcAutoConfiguration, org.springframework.boot.autoconfigure.security.servlet.UserDetailsServiceAutoConfiguration, org.springframework.boot.autoconfigure.security.oauth2.resource.servlet.OAuth2ResourceServerAutoConfiguration, org.springframework.boot.autoconfigure.groovy.template.GroovyTemplateAutoConfiguration, org.springframework.boot.autoconfigure.mustache.MustacheAutoConfiguration]], org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@5af3a0f, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@72cf2de5, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@395a3a75, org.springframework.boot.test.web.reactor.netty.DisableReactorResourceFactoryGlobalResourcesContextCustomizerFactory$DisableReactorResourceFactoryGlobalResourcesContextCustomizerCustomizer@47db5fa5, org.springframework.boot.test.context.SpringBootTestAnnotation@4f74f1a8], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:145) ~[spring-test-6.1.14.jar:6.1.14] + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:130) ~[spring-test-6.1.14.jar:6.1.14] + at org.springframework.boot.test.mock.mockito.MockitoTestExecutionListener.postProcessFields(MockitoTestExecutionListener.java:122) ~[spring-boot-test-3.3.5.jar:3.3.5] + at org.springframework.boot.test.mock.mockito.MockitoTestExecutionListener.injectFields(MockitoTestExecutionListener.java:106) ~[spring-boot-test-3.3.5.jar:3.3.5] + at org.springframework.boot.test.mock.mockito.MockitoTestExecutionListener.prepareTestInstance(MockitoTestExecutionListener.java:63) ~[spring-boot-test-3.3.5.jar:3.3.5] + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:260) ~[spring-test-6.1.14.jar:6.1.14] + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:163) ~[spring-test-6.1.14.jar:6.1.14] + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:378) ~[junit-jupiter-engine-5.10.5.jar:5.10.5] + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:383) ~[junit-jupiter-engine-5.10.5.jar:5.10.5] + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:378) ~[junit-jupiter-engine-5.10.5.jar:5.10.5] + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:215) ~[na:na] + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:197) ~[na:na] + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1709) ~[na:na] + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:570) ~[na:na] + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:560) ~[na:na] + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:315) ~[na:na] + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) ~[na:na] + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) ~[na:na] + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:807) ~[na:na] + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:377) ~[junit-jupiter-engine-5.10.5.jar:5.10.5] + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:290) ~[junit-jupiter-engine-5.10.5.jar:5.10.5] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:289) ~[junit-jupiter-engine-5.10.5.jar:5.10.5] + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:279) ~[junit-jupiter-engine-5.10.5.jar:5.10.5] + at java.base/java.util.Optional.orElseGet(Optional.java:364) ~[na:na] + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:278) ~[junit-jupiter-engine-5.10.5.jar:5.10.5] + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) ~[junit-jupiter-engine-5.10.5.jar:5.10.5] + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:106) ~[junit-jupiter-engine-5.10.5.jar:5.10.5] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:105) ~[junit-jupiter-engine-5.10.5.jar:5.10.5] + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:69) ~[junit-jupiter-engine-5.10.5.jar:5.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:128) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:128) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at java.base/java.util.ArrayList.forEach(ArrayList.java:1597) ~[na:na] + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:160) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:146) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:144) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:143) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:100) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at java.base/java.util.ArrayList.forEach(ArrayList.java:1597) ~[na:na] + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:160) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:146) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:144) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:143) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:100) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) ~[junit-platform-launcher-1.8.2.jar:1.8.2] + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) ~[junit-platform-launcher-1.8.2.jar:1.8.2] + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) ~[junit-platform-launcher-1.8.2.jar:1.8.2] + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) ~[junit-platform-launcher-1.8.2.jar:1.8.2] + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) ~[junit-platform-launcher-1.8.2.jar:1.8.2] + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) ~[junit-platform-launcher-1.8.2.jar:1.8.2] + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) ~[junit-platform-launcher-1.8.2.jar:1.8.2] + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) ~[junit-platform-launcher-1.8.2.jar:1.8.2] + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) ~[na:na] + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) ~[na:na] + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) ~[na:na] + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) ~[na:na] + at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103) ~[na:na] + at java.base/java.lang.reflect.Method.invoke(Method.java:580) ~[na:na] + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) ~[na:na] + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) ~[na:na] + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) ~[na:na] + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) ~[na:na] + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) ~[na:na] + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) ~[na:na] + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) ~[na:na] + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) ~[na:na] + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) ~[na:na] + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) ~[na:na] + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:122) ~[na:na] + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:72) ~[na:na] + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) ~[gradle-worker.jar:na] + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) ~[gradle-worker.jar:na] +2025-10-29 10:42:45 [Test worker] INFO o.s.t.c.s.AnnotationConfigContextLoaderUtils - Could not detect default configuration classes for test class [com.unicorn.hgzero.stt.integration.SttApiIntegrationTest]: SttApiIntegrationTest does not declare any static, non-private, non-final, nested classes annotated with @Configuration. +2025-10-29 10:42:45 [Test worker] INFO o.s.b.t.c.SpringBootTestContextBootstrapper - Found @SpringBootConfiguration com.unicorn.hgzero.stt.SttApplication for test class com.unicorn.hgzero.stt.integration.SttApiIntegrationTest +2025-10-29 10:42:45 [Test worker] INFO c.u.h.s.i.SttApiIntegrationTest - Starting SttApiIntegrationTest using Java 23.0.2 with PID 53104 (started by jominseo in /Users/jominseo/HGZero/stt) +2025-10-29 10:42:45 [Test worker] INFO c.u.h.s.i.SttApiIntegrationTest - The following 1 profile is active: "test" +2025-10-29 10:42:46 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration boolean -> org.hibernate.type.BasicTypeReference@68f69ca3 +2025-10-29 10:42:46 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration boolean -> org.hibernate.type.BasicTypeReference@68f69ca3 +2025-10-29 10:42:46 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Boolean -> org.hibernate.type.BasicTypeReference@68f69ca3 +2025-10-29 10:42:46 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration numeric_boolean -> org.hibernate.type.BasicTypeReference@7af9595d +2025-10-29 10:42:46 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration org.hibernate.type.NumericBooleanConverter -> org.hibernate.type.BasicTypeReference@7af9595d +2025-10-29 10:42:46 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration true_false -> org.hibernate.type.BasicTypeReference@7a34c1f6 +2025-10-29 10:42:46 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration org.hibernate.type.TrueFalseConverter -> org.hibernate.type.BasicTypeReference@7a34c1f6 +2025-10-29 10:42:46 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration yes_no -> org.hibernate.type.BasicTypeReference@6e9f8160 +2025-10-29 10:42:46 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration org.hibernate.type.YesNoConverter -> org.hibernate.type.BasicTypeReference@6e9f8160 +2025-10-29 10:42:46 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration byte -> org.hibernate.type.BasicTypeReference@3e998033 +2025-10-29 10:42:46 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration byte -> org.hibernate.type.BasicTypeReference@3e998033 +2025-10-29 10:42:46 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Byte -> org.hibernate.type.BasicTypeReference@3e998033 +2025-10-29 10:42:46 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration binary -> org.hibernate.type.BasicTypeReference@e1a150c +2025-10-29 10:42:46 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration byte[] -> org.hibernate.type.BasicTypeReference@e1a150c +2025-10-29 10:42:46 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration [B -> org.hibernate.type.BasicTypeReference@e1a150c +2025-10-29 10:42:46 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration binary_wrapper -> org.hibernate.type.BasicTypeReference@527d5e48 +2025-10-29 10:42:46 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration wrapper-binary -> org.hibernate.type.BasicTypeReference@527d5e48 +2025-10-29 10:42:46 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration image -> org.hibernate.type.BasicTypeReference@407b41e6 +2025-10-29 10:42:46 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration blob -> org.hibernate.type.BasicTypeReference@3291d9c2 +2025-10-29 10:42:46 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.sql.Blob -> org.hibernate.type.BasicTypeReference@3291d9c2 +2025-10-29 10:42:46 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration materialized_blob -> org.hibernate.type.BasicTypeReference@6cfd08e9 +2025-10-29 10:42:46 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration materialized_blob_wrapper -> org.hibernate.type.BasicTypeReference@54ca9420 +2025-10-29 10:42:46 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration short -> org.hibernate.type.BasicTypeReference@4ea48b2e +2025-10-29 10:42:46 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration short -> org.hibernate.type.BasicTypeReference@4ea48b2e +2025-10-29 10:42:46 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Short -> org.hibernate.type.BasicTypeReference@4ea48b2e +2025-10-29 10:42:46 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration integer -> org.hibernate.type.BasicTypeReference@72c704f1 +2025-10-29 10:42:46 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration int -> org.hibernate.type.BasicTypeReference@72c704f1 +2025-10-29 10:42:46 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Integer -> org.hibernate.type.BasicTypeReference@72c704f1 +2025-10-29 10:42:46 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration long -> org.hibernate.type.BasicTypeReference@76f9e000 +2025-10-29 10:42:46 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration long -> org.hibernate.type.BasicTypeReference@76f9e000 +2025-10-29 10:42:46 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Long -> org.hibernate.type.BasicTypeReference@76f9e000 +2025-10-29 10:42:46 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration float -> org.hibernate.type.BasicTypeReference@7612116b +2025-10-29 10:42:46 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration float -> org.hibernate.type.BasicTypeReference@7612116b +2025-10-29 10:42:46 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Float -> org.hibernate.type.BasicTypeReference@7612116b +2025-10-29 10:42:46 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration double -> org.hibernate.type.BasicTypeReference@1c05097c +2025-10-29 10:42:46 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration double -> org.hibernate.type.BasicTypeReference@1c05097c +2025-10-29 10:42:46 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Double -> org.hibernate.type.BasicTypeReference@1c05097c +2025-10-29 10:42:46 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration big_integer -> org.hibernate.type.BasicTypeReference@562f6681 +2025-10-29 10:42:46 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.math.BigInteger -> org.hibernate.type.BasicTypeReference@562f6681 +2025-10-29 10:42:46 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration big_decimal -> org.hibernate.type.BasicTypeReference@6f6f65a4 +2025-10-29 10:42:46 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.math.BigDecimal -> org.hibernate.type.BasicTypeReference@6f6f65a4 +2025-10-29 10:42:46 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration character -> org.hibernate.type.BasicTypeReference@990b86b +2025-10-29 10:42:46 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration char -> org.hibernate.type.BasicTypeReference@990b86b +2025-10-29 10:42:46 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Character -> org.hibernate.type.BasicTypeReference@990b86b +2025-10-29 10:42:46 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration character_nchar -> org.hibernate.type.BasicTypeReference@3dea1ecc +2025-10-29 10:42:46 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration string -> org.hibernate.type.BasicTypeReference@105c6c9e +2025-10-29 10:42:46 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.String -> org.hibernate.type.BasicTypeReference@105c6c9e +2025-10-29 10:42:46 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration nstring -> org.hibernate.type.BasicTypeReference@40a7974 +2025-10-29 10:42:46 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration characters -> org.hibernate.type.BasicTypeReference@8d5da7e +2025-10-29 10:42:46 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration char[] -> org.hibernate.type.BasicTypeReference@8d5da7e +2025-10-29 10:42:46 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration [C -> org.hibernate.type.BasicTypeReference@8d5da7e +2025-10-29 10:42:46 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration wrapper-characters -> org.hibernate.type.BasicTypeReference@65a4b9d6 +2025-10-29 10:42:46 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration text -> org.hibernate.type.BasicTypeReference@16ef1160 +2025-10-29 10:42:46 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration ntext -> org.hibernate.type.BasicTypeReference@41f90b10 +2025-10-29 10:42:46 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration clob -> org.hibernate.type.BasicTypeReference@67593f7b +2025-10-29 10:42:46 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.sql.Clob -> org.hibernate.type.BasicTypeReference@67593f7b +2025-10-29 10:42:46 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration nclob -> org.hibernate.type.BasicTypeReference@2773504f +2025-10-29 10:42:46 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.sql.NClob -> org.hibernate.type.BasicTypeReference@2773504f +2025-10-29 10:42:46 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration materialized_clob -> org.hibernate.type.BasicTypeReference@497921d0 +2025-10-29 10:42:46 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration materialized_clob_char_array -> org.hibernate.type.BasicTypeReference@40d10264 +2025-10-29 10:42:46 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration materialized_clob_character_array -> org.hibernate.type.BasicTypeReference@6edd4fe2 +2025-10-29 10:42:46 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration materialized_nclob -> org.hibernate.type.BasicTypeReference@53918b5e +2025-10-29 10:42:46 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration materialized_nclob_character_array -> org.hibernate.type.BasicTypeReference@5366575d +2025-10-29 10:42:46 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration materialized_nclob_char_array -> org.hibernate.type.BasicTypeReference@1b6cad77 +2025-10-29 10:42:46 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration Duration -> org.hibernate.type.BasicTypeReference@1fca53a7 +2025-10-29 10:42:46 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.Duration -> org.hibernate.type.BasicTypeReference@1fca53a7 +2025-10-29 10:42:46 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration LocalDateTime -> org.hibernate.type.BasicTypeReference@40dee07b +2025-10-29 10:42:46 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.LocalDateTime -> org.hibernate.type.BasicTypeReference@40dee07b +2025-10-29 10:42:46 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration LocalDate -> org.hibernate.type.BasicTypeReference@21e39b82 +2025-10-29 10:42:46 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.LocalDate -> org.hibernate.type.BasicTypeReference@21e39b82 +2025-10-29 10:42:46 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration LocalTime -> org.hibernate.type.BasicTypeReference@5f9a8ddc +2025-10-29 10:42:46 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.LocalTime -> org.hibernate.type.BasicTypeReference@5f9a8ddc +2025-10-29 10:42:46 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration OffsetDateTime -> org.hibernate.type.BasicTypeReference@1280bae3 +2025-10-29 10:42:46 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.OffsetDateTime -> org.hibernate.type.BasicTypeReference@1280bae3 +2025-10-29 10:42:46 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration OffsetDateTimeWithTimezone -> org.hibernate.type.BasicTypeReference@256a5df0 +2025-10-29 10:42:46 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration OffsetDateTimeWithoutTimezone -> org.hibernate.type.BasicTypeReference@1868ed54 +2025-10-29 10:42:46 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration OffsetTime -> org.hibernate.type.BasicTypeReference@131777e8 +2025-10-29 10:42:46 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.OffsetTime -> org.hibernate.type.BasicTypeReference@131777e8 +2025-10-29 10:42:46 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration OffsetTimeUtc -> org.hibernate.type.BasicTypeReference@45790cb +2025-10-29 10:42:46 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration OffsetTimeWithTimezone -> org.hibernate.type.BasicTypeReference@73a5d86c +2025-10-29 10:42:46 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration OffsetTimeWithoutTimezone -> org.hibernate.type.BasicTypeReference@2cf88901 +2025-10-29 10:42:46 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration ZonedDateTime -> org.hibernate.type.BasicTypeReference@4780341 +2025-10-29 10:42:46 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.ZonedDateTime -> org.hibernate.type.BasicTypeReference@4780341 +2025-10-29 10:42:46 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration ZonedDateTimeWithTimezone -> org.hibernate.type.BasicTypeReference@3c910acd +2025-10-29 10:42:46 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration ZonedDateTimeWithoutTimezone -> org.hibernate.type.BasicTypeReference@612ac38b +2025-10-29 10:42:46 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration date -> org.hibernate.type.BasicTypeReference@9f2fe2e +2025-10-29 10:42:46 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.sql.Date -> org.hibernate.type.BasicTypeReference@9f2fe2e +2025-10-29 10:42:46 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration time -> org.hibernate.type.BasicTypeReference@4dd4965a +2025-10-29 10:42:46 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.sql.Time -> org.hibernate.type.BasicTypeReference@4dd4965a +2025-10-29 10:42:46 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration timestamp -> org.hibernate.type.BasicTypeReference@79273a4f +2025-10-29 10:42:46 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.sql.Timestamp -> org.hibernate.type.BasicTypeReference@79273a4f +2025-10-29 10:42:46 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.util.Date -> org.hibernate.type.BasicTypeReference@79273a4f +2025-10-29 10:42:46 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration calendar -> org.hibernate.type.BasicTypeReference@4e26987b +2025-10-29 10:42:46 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.util.Calendar -> org.hibernate.type.BasicTypeReference@4e26987b +2025-10-29 10:42:46 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.util.GregorianCalendar -> org.hibernate.type.BasicTypeReference@4e26987b +2025-10-29 10:42:46 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration calendar_date -> org.hibernate.type.BasicTypeReference@50bb1c1f +2025-10-29 10:42:46 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration calendar_time -> org.hibernate.type.BasicTypeReference@39342614 +2025-10-29 10:42:46 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration instant -> org.hibernate.type.BasicTypeReference@7981963f +2025-10-29 10:42:46 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.Instant -> org.hibernate.type.BasicTypeReference@7981963f +2025-10-29 10:42:46 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration uuid -> org.hibernate.type.BasicTypeReference@31e3c34 +2025-10-29 10:42:46 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.util.UUID -> org.hibernate.type.BasicTypeReference@31e3c34 +2025-10-29 10:42:46 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration pg-uuid -> org.hibernate.type.BasicTypeReference@31e3c34 +2025-10-29 10:42:46 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration uuid-binary -> org.hibernate.type.BasicTypeReference@b4d83ac +2025-10-29 10:42:46 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration uuid-char -> org.hibernate.type.BasicTypeReference@13d10057 +2025-10-29 10:42:46 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration class -> org.hibernate.type.BasicTypeReference@66944c7c +2025-10-29 10:42:46 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Class -> org.hibernate.type.BasicTypeReference@66944c7c +2025-10-29 10:42:46 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration currency -> org.hibernate.type.BasicTypeReference@14993306 +2025-10-29 10:42:46 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration Currency -> org.hibernate.type.BasicTypeReference@14993306 +2025-10-29 10:42:46 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.util.Currency -> org.hibernate.type.BasicTypeReference@14993306 +2025-10-29 10:42:46 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration locale -> org.hibernate.type.BasicTypeReference@73ae82da +2025-10-29 10:42:46 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.util.Locale -> org.hibernate.type.BasicTypeReference@73ae82da +2025-10-29 10:42:46 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration serializable -> org.hibernate.type.BasicTypeReference@6866e740 +2025-10-29 10:42:46 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.io.Serializable -> org.hibernate.type.BasicTypeReference@6866e740 +2025-10-29 10:42:46 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration timezone -> org.hibernate.type.BasicTypeReference@2cd5b19c +2025-10-29 10:42:46 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.util.TimeZone -> org.hibernate.type.BasicTypeReference@2cd5b19c +2025-10-29 10:42:46 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration ZoneOffset -> org.hibernate.type.BasicTypeReference@7109b603 +2025-10-29 10:42:46 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.ZoneOffset -> org.hibernate.type.BasicTypeReference@7109b603 +2025-10-29 10:42:46 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration url -> org.hibernate.type.BasicTypeReference@76b642aa +2025-10-29 10:42:46 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.net.URL -> org.hibernate.type.BasicTypeReference@76b642aa +2025-10-29 10:42:46 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration vector -> org.hibernate.type.BasicTypeReference@29b5e7db +2025-10-29 10:42:46 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration row_version -> org.hibernate.type.BasicTypeReference@286dfa20 +2025-10-29 10:42:46 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration object -> org.hibernate.type.JavaObjectType@3909a854 +2025-10-29 10:42:46 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Object -> org.hibernate.type.JavaObjectType@3909a854 +2025-10-29 10:42:46 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration null -> org.hibernate.type.NullType@55f6f965 +2025-10-29 10:42:46 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration imm_date -> org.hibernate.type.BasicTypeReference@451211cf +2025-10-29 10:42:46 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration imm_time -> org.hibernate.type.BasicTypeReference@74df55b2 +2025-10-29 10:42:46 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration imm_timestamp -> org.hibernate.type.BasicTypeReference@6796ec2b +2025-10-29 10:42:46 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration imm_calendar -> org.hibernate.type.BasicTypeReference@713b2ee9 +2025-10-29 10:42:46 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration imm_calendar_date -> org.hibernate.type.BasicTypeReference@2472d568 +2025-10-29 10:42:46 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration imm_calendar_time -> org.hibernate.type.BasicTypeReference@2a8e7691 +2025-10-29 10:42:46 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration imm_binary -> org.hibernate.type.BasicTypeReference@7a29305f +2025-10-29 10:42:46 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration imm_serializable -> org.hibernate.type.BasicTypeReference@52cd1595 +2025-10-29 10:42:46 [Test worker] INFO com.zaxxer.hikari.HikariDataSource - HikariPool-2 - Starting... +2025-10-29 10:42:46 [Test worker] INFO com.zaxxer.hikari.pool.HikariPool - HikariPool-2 - Added connection conn5: url=jdbc:h2:mem:testdb user=SA +2025-10-29 10:42:46 [Test worker] INFO com.zaxxer.hikari.HikariDataSource - HikariPool-2 - Start completed. +2025-10-29 10:42:46 [Test worker] WARN org.hibernate.orm.deprecation - HHH90000025: H2Dialect does not need to be specified explicitly using 'hibernate.dialect' (remove the property setting and it will be selected by default) +2025-10-29 10:42:46 [Test worker] DEBUG o.h.t.d.jdbc.spi.JdbcTypeRegistry - addDescriptor(NCharTypeDescriptor) replaced previous registration(CharTypeDescriptor) +2025-10-29 10:42:46 [Test worker] DEBUG o.h.t.d.jdbc.spi.JdbcTypeRegistry - addDescriptor(NVarcharTypeDescriptor) replaced previous registration(VarcharTypeDescriptor) +2025-10-29 10:42:46 [Test worker] DEBUG o.h.t.d.jdbc.spi.JdbcTypeRegistry - addDescriptor(LongNVarcharTypeDescriptor) replaced previous registration(LongVarcharTypeDescriptor) +2025-10-29 10:42:46 [Test worker] DEBUG o.h.t.d.jdbc.spi.JdbcTypeRegistry - addDescriptor(NClobTypeDescriptor(DEFAULT)) replaced previous registration(ClobTypeDescriptor(DEFAULT)) +2025-10-29 10:42:46 [Test worker] DEBUG o.h.t.d.jdbc.spi.JdbcTypeRegistry - addDescriptor(2005, ClobTypeDescriptor(STREAM_BINDING)) replaced previous registration(ClobTypeDescriptor(DEFAULT)) +2025-10-29 10:42:46 [Test worker] DEBUG o.h.t.d.jdbc.spi.JdbcTypeRegistry - addDescriptor(TimestampUtcDescriptor) replaced previous registration(TimestampUtcDescriptor) +2025-10-29 10:42:46 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration org.hibernate.type.DurationType -> basicType@25(java.time.Duration,3015) +2025-10-29 10:42:46 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration Duration -> basicType@25(java.time.Duration,3015) +2025-10-29 10:42:46 [Test worker] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.Duration -> basicType@25(java.time.Duration,3015) +2025-10-29 10:42:46 [Test worker] DEBUG o.h.type.spi.TypeConfiguration$Scope - Scoping TypeConfiguration [org.hibernate.type.spi.TypeConfiguration@4fa5fae0] to MetadataBuildingContext [org.hibernate.boot.internal.MetadataBuildingContextRootImpl@7c78d028] +2025-10-29 10:42:46 [Test worker] DEBUG o.h.type.spi.TypeConfiguration$Scope - Scoping TypeConfiguration [org.hibernate.type.spi.TypeConfiguration@4fa5fae0] to SessionFactoryImplementor [org.hibernate.internal.SessionFactoryImpl@1db9adf3] +2025-10-29 10:42:46 [Test worker] DEBUG org.hibernate.SQL - + drop table if exists recordings cascade +2025-10-29 10:42:46 [Test worker] DEBUG org.hibernate.SQL - + drop table if exists transcript_segments cascade +2025-10-29 10:42:46 [Test worker] DEBUG org.hibernate.SQL - + drop table if exists transcriptions cascade +2025-10-29 10:42:46 [Test worker] DEBUG org.hibernate.SQL - + create table recordings ( + duration integer, + segment_count integer, + speaker_count integer, + created_at timestamp(6) not null, + end_time timestamp(6), + start_time timestamp(6), + updated_at timestamp(6) not null, + language varchar(10) not null, + meeting_id varchar(50) not null, + recording_id varchar(50) not null, + session_id varchar(50) not null, + status enum ('COMPLETED','ERROR','READY','RECORDING','STOPPED') not null, + primary key (recording_id) + ) +2025-10-29 10:42:46 [Test worker] DEBUG org.hibernate.SQL - + create table transcript_segments ( + chunk_index integer, + confidence float(53), + duration float(53), + warning_flag boolean, + created_at timestamp(6) not null, + timestamp bigint not null, + updated_at timestamp(6) not null, + recording_id varchar(50) not null, + segment_id varchar(50) not null, + speaker_id varchar(50), + transcript_id varchar(50), + speaker_name varchar(100), + text TEXT not null, + primary key (segment_id) + ) +2025-10-29 10:42:46 [Test worker] DEBUG org.hibernate.SQL - + create table transcriptions ( + average_confidence float(53), + segment_count integer, + speaker_count integer, + total_duration integer, + completed_at timestamp(6), + created_at timestamp(6) not null, + updated_at timestamp(6) not null, + recording_id varchar(50) not null, + transcript_id varchar(50) not null, + full_text TEXT, + primary key (transcript_id) + ) +2025-10-29 10:42:46 [Test worker] TRACE o.h.type.spi.TypeConfiguration$Scope - Handling #sessionFactoryCreated from [org.hibernate.internal.SessionFactoryImpl@1db9adf3] for TypeConfiguration +2025-10-29 10:42:46 [Test worker] INFO c.u.h.stt.service.AzureSpeechService - Azure Speech Service 초기화 시작 - subscriptionKey: 설정됨, region: eastus +2025-10-29 10:42:46 [Test worker] INFO c.u.h.stt.service.AzureSpeechService - Azure Speech Service 초기화 완료 - Region: eastus, Language: ko-KR +2025-10-29 10:42:46 [Test worker] WARN o.s.b.a.o.j.JpaBaseConfiguration$JpaWebConfiguration - spring.jpa.open-in-view is enabled by default. Therefore, database queries may be performed during view rendering. Explicitly configure spring.jpa.open-in-view to disable this warning +2025-10-29 10:42:46 [Test worker] WARN o.s.b.a.s.s.UserDetailsServiceAutoConfiguration - + +Using generated security password: 5e7ac32d-698f-4b0c-bcc2-43f062cb9b88 + +This generated password is for development use only. Your security configuration must be updated before running your application in production. + +2025-10-29 10:42:46 [Test worker] WARN o.s.w.c.s.GenericWebApplicationContext - Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'createWebSocketContainer' defined in class path resource [com/unicorn/hgzero/stt/config/WebSocketConfig.class]: Attribute 'jakarta.websocket.server.ServerContainer' not found in ServletContext +2025-10-29 10:42:46 [Test worker] INFO c.u.h.stt.service.AzureSpeechService - Azure Speech Service 종료 +2025-10-29 10:42:46 [Test worker] DEBUG org.hibernate.SQL - + drop table if exists recordings cascade +2025-10-29 10:42:46 [Test worker] DEBUG org.hibernate.SQL - + drop table if exists transcript_segments cascade +2025-10-29 10:42:46 [Test worker] DEBUG org.hibernate.SQL - + drop table if exists transcriptions cascade +2025-10-29 10:42:46 [Test worker] TRACE o.h.type.spi.TypeConfiguration$Scope - Handling #sessionFactoryClosed from [org.hibernate.internal.SessionFactoryImpl@1db9adf3] for TypeConfiguration +2025-10-29 10:42:46 [Test worker] DEBUG o.h.type.spi.TypeConfiguration$Scope - Un-scoping TypeConfiguration [org.hibernate.type.spi.TypeConfiguration$Scope@476fb241] from SessionFactory [org.hibernate.internal.SessionFactoryImpl@1db9adf3] +2025-10-29 10:42:46 [Test worker] INFO com.zaxxer.hikari.HikariDataSource - HikariPool-2 - Shutdown initiated... +2025-10-29 10:42:46 [Test worker] INFO com.zaxxer.hikari.HikariDataSource - HikariPool-2 - Shutdown completed. +2025-10-29 10:42:46 [Test worker] ERROR o.s.boot.SpringApplication - Application run failed +org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'createWebSocketContainer' defined in class path resource [com/unicorn/hgzero/stt/config/WebSocketConfig.class]: Attribute 'jakarta.websocket.server.ServerContainer' not found in ServletContext + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1806) ~[spring-beans-6.1.14.jar:6.1.14] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:600) ~[spring-beans-6.1.14.jar:6.1.14] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:522) ~[spring-beans-6.1.14.jar:6.1.14] + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:337) ~[spring-beans-6.1.14.jar:6.1.14] + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) ~[spring-beans-6.1.14.jar:6.1.14] + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:335) ~[spring-beans-6.1.14.jar:6.1.14] + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) ~[spring-beans-6.1.14.jar:6.1.14] + at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:969) ~[spring-beans-6.1.14.jar:6.1.14] + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:971) ~[spring-context-6.1.14.jar:6.1.14] + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:625) ~[spring-context-6.1.14.jar:6.1.14] + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:754) ~[spring-boot-3.3.5.jar:3.3.5] + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:456) ~[spring-boot-3.3.5.jar:3.3.5] + at org.springframework.boot.SpringApplication.run(SpringApplication.java:335) ~[spring-boot-3.3.5.jar:3.3.5] + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) ~[spring-boot-test-3.3.5.jar:3.3.5] + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:58) ~[spring-core-6.1.14.jar:6.1.14] + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:46) ~[spring-core-6.1.14.jar:6.1.14] + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1463) ~[spring-boot-3.3.5.jar:3.3.5] + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:553) ~[spring-boot-test-3.3.5.jar:3.3.5] + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) ~[spring-boot-test-3.3.5.jar:3.3.5] + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) ~[spring-boot-test-3.3.5.jar:3.3.5] + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:225) ~[spring-test-6.1.14.jar:6.1.14] + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:152) ~[spring-test-6.1.14.jar:6.1.14] + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:130) ~[spring-test-6.1.14.jar:6.1.14] + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) ~[spring-test-6.1.14.jar:6.1.14] + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) ~[spring-test-6.1.14.jar:6.1.14] + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:260) ~[spring-test-6.1.14.jar:6.1.14] + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:163) ~[spring-test-6.1.14.jar:6.1.14] + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:378) ~[junit-jupiter-engine-5.10.5.jar:5.10.5] + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:383) ~[junit-jupiter-engine-5.10.5.jar:5.10.5] + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:378) ~[junit-jupiter-engine-5.10.5.jar:5.10.5] + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:215) ~[na:na] + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:197) ~[na:na] + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1709) ~[na:na] + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:570) ~[na:na] + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:560) ~[na:na] + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:315) ~[na:na] + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) ~[na:na] + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) ~[na:na] + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:807) ~[na:na] + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:377) ~[junit-jupiter-engine-5.10.5.jar:5.10.5] + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:290) ~[junit-jupiter-engine-5.10.5.jar:5.10.5] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:289) ~[junit-jupiter-engine-5.10.5.jar:5.10.5] + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:279) ~[junit-jupiter-engine-5.10.5.jar:5.10.5] + at java.base/java.util.Optional.orElseGet(Optional.java:364) ~[na:na] + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:278) ~[junit-jupiter-engine-5.10.5.jar:5.10.5] + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) ~[junit-jupiter-engine-5.10.5.jar:5.10.5] + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:106) ~[junit-jupiter-engine-5.10.5.jar:5.10.5] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:105) ~[junit-jupiter-engine-5.10.5.jar:5.10.5] + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:69) ~[junit-jupiter-engine-5.10.5.jar:5.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:128) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:128) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at java.base/java.util.ArrayList.forEach(ArrayList.java:1597) ~[na:na] + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:160) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:146) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:144) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:143) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:100) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at java.base/java.util.ArrayList.forEach(ArrayList.java:1597) ~[na:na] + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:160) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:146) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:144) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:143) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:100) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) ~[junit-platform-launcher-1.8.2.jar:1.8.2] + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) ~[junit-platform-launcher-1.8.2.jar:1.8.2] + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) ~[junit-platform-launcher-1.8.2.jar:1.8.2] + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) ~[junit-platform-launcher-1.8.2.jar:1.8.2] + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) ~[junit-platform-launcher-1.8.2.jar:1.8.2] + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) ~[junit-platform-launcher-1.8.2.jar:1.8.2] + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) ~[junit-platform-launcher-1.8.2.jar:1.8.2] + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) ~[junit-platform-launcher-1.8.2.jar:1.8.2] + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) ~[na:na] + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) ~[na:na] + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) ~[na:na] + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) ~[na:na] + at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103) ~[na:na] + at java.base/java.lang.reflect.Method.invoke(Method.java:580) ~[na:na] + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) ~[na:na] + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) ~[na:na] + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) ~[na:na] + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) ~[na:na] + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) ~[na:na] + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) ~[na:na] + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) ~[na:na] + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) ~[na:na] + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) ~[na:na] + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) ~[na:na] + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:122) ~[na:na] + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:72) ~[na:na] + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) ~[gradle-worker.jar:na] + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) ~[gradle-worker.jar:na] +Caused by: java.lang.IllegalStateException: Attribute 'jakarta.websocket.server.ServerContainer' not found in ServletContext + at org.springframework.util.Assert.state(Assert.java:76) ~[spring-core-6.1.14.jar:6.1.14] + at org.springframework.web.socket.server.standard.ServletServerContainerFactoryBean.afterPropertiesSet(ServletServerContainerFactoryBean.java:117) ~[spring-websocket-6.1.14.jar:6.1.14] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1853) ~[spring-beans-6.1.14.jar:6.1.14] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1802) ~[spring-beans-6.1.14.jar:6.1.14] + ... 105 common frames omitted +2025-10-29 10:42:46 [Test worker] WARN o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [com.unicorn.hgzero.stt.integration.SttApiIntegrationTest@5514334e] +java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@6270fadb testClass = com.unicorn.hgzero.stt.integration.SttApiIntegrationTest, locations = [], classes = [com.unicorn.hgzero.stt.SttApplication], contextInitializerClasses = [], activeProfiles = ["test"], propertySourceDescriptors = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.OnFailureConditionReportContextCustomizerFactory$OnFailureConditionReportContextCustomizer@4da602fc, org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@1f, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizer@57eda880, [ImportsContextCustomizer@2cee7445 key = [org.springframework.boot.autoconfigure.task.TaskExecutionAutoConfiguration, org.springframework.boot.autoconfigure.web.servlet.HttpEncodingAutoConfiguration, org.springframework.boot.autoconfigure.validation.ValidationAutoConfiguration, org.springframework.boot.autoconfigure.context.MessageSourceAutoConfiguration, org.springframework.boot.autoconfigure.hateoas.HypermediaAutoConfiguration, org.springframework.boot.autoconfigure.jackson.JacksonAutoConfiguration, org.springframework.boot.autoconfigure.data.web.SpringDataWebAutoConfiguration, org.springframework.boot.autoconfigure.thymeleaf.ThymeleafAutoConfiguration, org.springframework.boot.autoconfigure.web.servlet.error.ErrorMvcAutoConfiguration, org.springframework.boot.autoconfigure.gson.GsonAutoConfiguration, org.springframework.boot.autoconfigure.jsonb.JsonbAutoConfiguration, org.springframework.boot.autoconfigure.freemarker.FreeMarkerAutoConfiguration, org.springframework.boot.autoconfigure.web.servlet.WebMvcAutoConfiguration, org.springframework.boot.autoconfigure.http.HttpMessageConvertersAutoConfiguration, org.springframework.boot.autoconfigure.groovy.template.GroovyTemplateAutoConfiguration, org.springframework.boot.autoconfigure.mustache.MustacheAutoConfiguration]], org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@5af3a0f, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@72cf2de5, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@aae1efca, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@7b324585, org.springframework.boot.test.web.reactor.netty.DisableReactorResourceFactoryGlobalResourcesContextCustomizerFactory$DisableReactorResourceFactoryGlobalResourcesContextCustomizerCustomizer@47db5fa5, org.springframework.boot.test.context.SpringBootTestAnnotation@72923d15], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:180) ~[spring-test-6.1.14.jar:6.1.14] + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:130) ~[spring-test-6.1.14.jar:6.1.14] + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) ~[spring-test-6.1.14.jar:6.1.14] + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) ~[spring-test-6.1.14.jar:6.1.14] + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:260) ~[spring-test-6.1.14.jar:6.1.14] + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:163) ~[spring-test-6.1.14.jar:6.1.14] + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:378) ~[junit-jupiter-engine-5.10.5.jar:5.10.5] + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:383) ~[junit-jupiter-engine-5.10.5.jar:5.10.5] + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:378) ~[junit-jupiter-engine-5.10.5.jar:5.10.5] + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:215) ~[na:na] + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:197) ~[na:na] + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1709) ~[na:na] + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:570) ~[na:na] + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:560) ~[na:na] + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:315) ~[na:na] + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) ~[na:na] + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) ~[na:na] + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:807) ~[na:na] + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:377) ~[junit-jupiter-engine-5.10.5.jar:5.10.5] + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:290) ~[junit-jupiter-engine-5.10.5.jar:5.10.5] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:289) ~[junit-jupiter-engine-5.10.5.jar:5.10.5] + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:279) ~[junit-jupiter-engine-5.10.5.jar:5.10.5] + at java.base/java.util.Optional.orElseGet(Optional.java:364) ~[na:na] + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:278) ~[junit-jupiter-engine-5.10.5.jar:5.10.5] + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) ~[junit-jupiter-engine-5.10.5.jar:5.10.5] + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:106) ~[junit-jupiter-engine-5.10.5.jar:5.10.5] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:105) ~[junit-jupiter-engine-5.10.5.jar:5.10.5] + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:69) ~[junit-jupiter-engine-5.10.5.jar:5.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:128) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:128) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at java.base/java.util.ArrayList.forEach(ArrayList.java:1597) ~[na:na] + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:160) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:146) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:144) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:143) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:100) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at java.base/java.util.ArrayList.forEach(ArrayList.java:1597) ~[na:na] + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:160) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:146) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:144) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:143) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:100) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) ~[junit-platform-launcher-1.8.2.jar:1.8.2] + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) ~[junit-platform-launcher-1.8.2.jar:1.8.2] + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) ~[junit-platform-launcher-1.8.2.jar:1.8.2] + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) ~[junit-platform-launcher-1.8.2.jar:1.8.2] + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) ~[junit-platform-launcher-1.8.2.jar:1.8.2] + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) ~[junit-platform-launcher-1.8.2.jar:1.8.2] + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) ~[junit-platform-launcher-1.8.2.jar:1.8.2] + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) ~[junit-platform-launcher-1.8.2.jar:1.8.2] + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) ~[na:na] + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) ~[na:na] + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) ~[na:na] + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) ~[na:na] + at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103) ~[na:na] + at java.base/java.lang.reflect.Method.invoke(Method.java:580) ~[na:na] + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) ~[na:na] + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) ~[na:na] + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) ~[na:na] + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) ~[na:na] + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) ~[na:na] + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) ~[na:na] + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) ~[na:na] + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) ~[na:na] + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) ~[na:na] + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) ~[na:na] + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:122) ~[na:na] + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:72) ~[na:na] + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) ~[gradle-worker.jar:na] + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) ~[gradle-worker.jar:na] +Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'createWebSocketContainer' defined in class path resource [com/unicorn/hgzero/stt/config/WebSocketConfig.class]: Attribute 'jakarta.websocket.server.ServerContainer' not found in ServletContext + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1806) ~[spring-beans-6.1.14.jar:6.1.14] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:600) ~[spring-beans-6.1.14.jar:6.1.14] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:522) ~[spring-beans-6.1.14.jar:6.1.14] + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:337) ~[spring-beans-6.1.14.jar:6.1.14] + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) ~[spring-beans-6.1.14.jar:6.1.14] + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:335) ~[spring-beans-6.1.14.jar:6.1.14] + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) ~[spring-beans-6.1.14.jar:6.1.14] + at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:969) ~[spring-beans-6.1.14.jar:6.1.14] + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:971) ~[spring-context-6.1.14.jar:6.1.14] + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:625) ~[spring-context-6.1.14.jar:6.1.14] + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:754) ~[spring-boot-3.3.5.jar:3.3.5] + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:456) ~[spring-boot-3.3.5.jar:3.3.5] + at org.springframework.boot.SpringApplication.run(SpringApplication.java:335) ~[spring-boot-3.3.5.jar:3.3.5] + at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) ~[spring-boot-test-3.3.5.jar:3.3.5] + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:58) ~[spring-core-6.1.14.jar:6.1.14] + at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:46) ~[spring-core-6.1.14.jar:6.1.14] + at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1463) ~[spring-boot-3.3.5.jar:3.3.5] + at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:553) ~[spring-boot-test-3.3.5.jar:3.3.5] + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) ~[spring-boot-test-3.3.5.jar:3.3.5] + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) ~[spring-boot-test-3.3.5.jar:3.3.5] + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:225) ~[spring-test-6.1.14.jar:6.1.14] + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:152) ~[spring-test-6.1.14.jar:6.1.14] + ... 84 common frames omitted +Caused by: java.lang.IllegalStateException: Attribute 'jakarta.websocket.server.ServerContainer' not found in ServletContext + at org.springframework.util.Assert.state(Assert.java:76) ~[spring-core-6.1.14.jar:6.1.14] + at org.springframework.web.socket.server.standard.ServletServerContainerFactoryBean.afterPropertiesSet(ServletServerContainerFactoryBean.java:117) ~[spring-websocket-6.1.14.jar:6.1.14] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1853) ~[spring-beans-6.1.14.jar:6.1.14] + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1802) ~[spring-beans-6.1.14.jar:6.1.14] + ... 105 common frames omitted +2025-10-29 10:42:46 [Test worker] WARN o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [com.unicorn.hgzero.stt.integration.SttApiIntegrationTest@1f0d5d7b] +java.lang.IllegalStateException: ApplicationContext failure threshold (1) exceeded: skipping repeated attempt to load context for [WebMergedContextConfiguration@6270fadb testClass = com.unicorn.hgzero.stt.integration.SttApiIntegrationTest, locations = [], classes = [com.unicorn.hgzero.stt.SttApplication], contextInitializerClasses = [], activeProfiles = ["test"], propertySourceDescriptors = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.OnFailureConditionReportContextCustomizerFactory$OnFailureConditionReportContextCustomizer@4da602fc, org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@1f, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizer@57eda880, [ImportsContextCustomizer@2cee7445 key = [org.springframework.boot.autoconfigure.task.TaskExecutionAutoConfiguration, org.springframework.boot.autoconfigure.web.servlet.HttpEncodingAutoConfiguration, org.springframework.boot.autoconfigure.validation.ValidationAutoConfiguration, org.springframework.boot.autoconfigure.context.MessageSourceAutoConfiguration, org.springframework.boot.autoconfigure.hateoas.HypermediaAutoConfiguration, org.springframework.boot.autoconfigure.jackson.JacksonAutoConfiguration, org.springframework.boot.autoconfigure.data.web.SpringDataWebAutoConfiguration, org.springframework.boot.autoconfigure.thymeleaf.ThymeleafAutoConfiguration, org.springframework.boot.autoconfigure.web.servlet.error.ErrorMvcAutoConfiguration, org.springframework.boot.autoconfigure.gson.GsonAutoConfiguration, org.springframework.boot.autoconfigure.jsonb.JsonbAutoConfiguration, org.springframework.boot.autoconfigure.freemarker.FreeMarkerAutoConfiguration, org.springframework.boot.autoconfigure.web.servlet.WebMvcAutoConfiguration, org.springframework.boot.autoconfigure.http.HttpMessageConvertersAutoConfiguration, org.springframework.boot.autoconfigure.groovy.template.GroovyTemplateAutoConfiguration, org.springframework.boot.autoconfigure.mustache.MustacheAutoConfiguration]], org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@5af3a0f, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@72cf2de5, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@aae1efca, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@7b324585, org.springframework.boot.test.web.reactor.netty.DisableReactorResourceFactoryGlobalResourcesContextCustomizerFactory$DisableReactorResourceFactoryGlobalResourcesContextCustomizerCustomizer@47db5fa5, org.springframework.boot.test.context.SpringBootTestAnnotation@72923d15], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:145) ~[spring-test-6.1.14.jar:6.1.14] + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:130) ~[spring-test-6.1.14.jar:6.1.14] + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) ~[spring-test-6.1.14.jar:6.1.14] + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) ~[spring-test-6.1.14.jar:6.1.14] + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:260) ~[spring-test-6.1.14.jar:6.1.14] + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:163) ~[spring-test-6.1.14.jar:6.1.14] + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:378) ~[junit-jupiter-engine-5.10.5.jar:5.10.5] + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:383) ~[junit-jupiter-engine-5.10.5.jar:5.10.5] + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:378) ~[junit-jupiter-engine-5.10.5.jar:5.10.5] + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:215) ~[na:na] + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:197) ~[na:na] + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1709) ~[na:na] + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:570) ~[na:na] + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:560) ~[na:na] + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:315) ~[na:na] + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) ~[na:na] + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) ~[na:na] + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:807) ~[na:na] + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:377) ~[junit-jupiter-engine-5.10.5.jar:5.10.5] + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:290) ~[junit-jupiter-engine-5.10.5.jar:5.10.5] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:289) ~[junit-jupiter-engine-5.10.5.jar:5.10.5] + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:279) ~[junit-jupiter-engine-5.10.5.jar:5.10.5] + at java.base/java.util.Optional.orElseGet(Optional.java:364) ~[na:na] + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:278) ~[junit-jupiter-engine-5.10.5.jar:5.10.5] + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) ~[junit-jupiter-engine-5.10.5.jar:5.10.5] + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:106) ~[junit-jupiter-engine-5.10.5.jar:5.10.5] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:105) ~[junit-jupiter-engine-5.10.5.jar:5.10.5] + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:69) ~[junit-jupiter-engine-5.10.5.jar:5.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:128) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:128) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at java.base/java.util.ArrayList.forEach(ArrayList.java:1597) ~[na:na] + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:160) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:146) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:144) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:143) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:100) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at java.base/java.util.ArrayList.forEach(ArrayList.java:1597) ~[na:na] + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:160) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:146) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:144) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:143) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:100) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) ~[junit-platform-launcher-1.8.2.jar:1.8.2] + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) ~[junit-platform-launcher-1.8.2.jar:1.8.2] + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) ~[junit-platform-launcher-1.8.2.jar:1.8.2] + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) ~[junit-platform-launcher-1.8.2.jar:1.8.2] + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) ~[junit-platform-launcher-1.8.2.jar:1.8.2] + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) ~[junit-platform-launcher-1.8.2.jar:1.8.2] + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) ~[junit-platform-launcher-1.8.2.jar:1.8.2] + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) ~[junit-platform-launcher-1.8.2.jar:1.8.2] + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) ~[na:na] + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) ~[na:na] + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) ~[na:na] + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) ~[na:na] + at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103) ~[na:na] + at java.base/java.lang.reflect.Method.invoke(Method.java:580) ~[na:na] + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) ~[na:na] + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) ~[na:na] + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) ~[na:na] + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) ~[na:na] + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) ~[na:na] + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) ~[na:na] + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) ~[na:na] + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) ~[na:na] + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) ~[na:na] + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) ~[na:na] + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:122) ~[na:na] + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:72) ~[na:na] + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) ~[gradle-worker.jar:na] + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) ~[gradle-worker.jar:na] +2025-10-29 10:42:46 [Test worker] WARN o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] to prepare test instance [com.unicorn.hgzero.stt.integration.SttApiIntegrationTest@34648b8d] +java.lang.IllegalStateException: ApplicationContext failure threshold (1) exceeded: skipping repeated attempt to load context for [WebMergedContextConfiguration@6270fadb testClass = com.unicorn.hgzero.stt.integration.SttApiIntegrationTest, locations = [], classes = [com.unicorn.hgzero.stt.SttApplication], contextInitializerClasses = [], activeProfiles = ["test"], propertySourceDescriptors = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.OnFailureConditionReportContextCustomizerFactory$OnFailureConditionReportContextCustomizer@4da602fc, org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@1f, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizer@57eda880, [ImportsContextCustomizer@2cee7445 key = [org.springframework.boot.autoconfigure.task.TaskExecutionAutoConfiguration, org.springframework.boot.autoconfigure.web.servlet.HttpEncodingAutoConfiguration, org.springframework.boot.autoconfigure.validation.ValidationAutoConfiguration, org.springframework.boot.autoconfigure.context.MessageSourceAutoConfiguration, org.springframework.boot.autoconfigure.hateoas.HypermediaAutoConfiguration, org.springframework.boot.autoconfigure.jackson.JacksonAutoConfiguration, org.springframework.boot.autoconfigure.data.web.SpringDataWebAutoConfiguration, org.springframework.boot.autoconfigure.thymeleaf.ThymeleafAutoConfiguration, org.springframework.boot.autoconfigure.web.servlet.error.ErrorMvcAutoConfiguration, org.springframework.boot.autoconfigure.gson.GsonAutoConfiguration, org.springframework.boot.autoconfigure.jsonb.JsonbAutoConfiguration, org.springframework.boot.autoconfigure.freemarker.FreeMarkerAutoConfiguration, org.springframework.boot.autoconfigure.web.servlet.WebMvcAutoConfiguration, org.springframework.boot.autoconfigure.http.HttpMessageConvertersAutoConfiguration, org.springframework.boot.autoconfigure.groovy.template.GroovyTemplateAutoConfiguration, org.springframework.boot.autoconfigure.mustache.MustacheAutoConfiguration]], org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@5af3a0f, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@72cf2de5, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@aae1efca, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@7b324585, org.springframework.boot.test.web.reactor.netty.DisableReactorResourceFactoryGlobalResourcesContextCustomizerFactory$DisableReactorResourceFactoryGlobalResourcesContextCustomizerCustomizer@47db5fa5, org.springframework.boot.test.context.SpringBootTestAnnotation@72923d15], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:145) ~[spring-test-6.1.14.jar:6.1.14] + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:130) ~[spring-test-6.1.14.jar:6.1.14] + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) ~[spring-test-6.1.14.jar:6.1.14] + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) ~[spring-test-6.1.14.jar:6.1.14] + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:260) ~[spring-test-6.1.14.jar:6.1.14] + at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:163) ~[spring-test-6.1.14.jar:6.1.14] + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:378) ~[junit-jupiter-engine-5.10.5.jar:5.10.5] + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:383) ~[junit-jupiter-engine-5.10.5.jar:5.10.5] + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:378) ~[junit-jupiter-engine-5.10.5.jar:5.10.5] + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:215) ~[na:na] + at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:197) ~[na:na] + at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1709) ~[na:na] + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:570) ~[na:na] + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:560) ~[na:na] + at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:315) ~[na:na] + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) ~[na:na] + at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) ~[na:na] + at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:807) ~[na:na] + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:377) ~[junit-jupiter-engine-5.10.5.jar:5.10.5] + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:290) ~[junit-jupiter-engine-5.10.5.jar:5.10.5] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:289) ~[junit-jupiter-engine-5.10.5.jar:5.10.5] + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:279) ~[junit-jupiter-engine-5.10.5.jar:5.10.5] + at java.base/java.util.Optional.orElseGet(Optional.java:364) ~[na:na] + at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:278) ~[junit-jupiter-engine-5.10.5.jar:5.10.5] + at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) ~[junit-jupiter-engine-5.10.5.jar:5.10.5] + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:106) ~[junit-jupiter-engine-5.10.5.jar:5.10.5] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:105) ~[junit-jupiter-engine-5.10.5.jar:5.10.5] + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:69) ~[junit-jupiter-engine-5.10.5.jar:5.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:128) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:128) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at java.base/java.util.ArrayList.forEach(ArrayList.java:1597) ~[na:na] + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:160) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:146) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:144) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:143) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:100) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at java.base/java.util.ArrayList.forEach(ArrayList.java:1597) ~[na:na] + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:160) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:146) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:144) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:143) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:100) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) ~[junit-platform-engine-1.10.5.jar:1.10.5] + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) ~[junit-platform-launcher-1.8.2.jar:1.8.2] + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) ~[junit-platform-launcher-1.8.2.jar:1.8.2] + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) ~[junit-platform-launcher-1.8.2.jar:1.8.2] + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) ~[junit-platform-launcher-1.8.2.jar:1.8.2] + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) ~[junit-platform-launcher-1.8.2.jar:1.8.2] + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) ~[junit-platform-launcher-1.8.2.jar:1.8.2] + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) ~[junit-platform-launcher-1.8.2.jar:1.8.2] + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) ~[junit-platform-launcher-1.8.2.jar:1.8.2] + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:124) ~[na:na] + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:99) ~[na:na] + at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:94) ~[na:na] + at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:63) ~[na:na] + at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103) ~[na:na] + at java.base/java.lang.reflect.Method.invoke(Method.java:580) ~[na:na] + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) ~[na:na] + at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) ~[na:na] + at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) ~[na:na] + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) ~[na:na] + at jdk.proxy1/jdk.proxy1.$Proxy4.stop(Unknown Source) ~[na:na] + at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:200) ~[na:na] + at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) ~[na:na] + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) ~[na:na] + at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) ~[na:na] + at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) ~[na:na] + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:122) ~[na:na] + at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:72) ~[na:na] + at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) ~[gradle-worker.jar:na] + at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) ~[gradle-worker.jar:na] +2025-10-29 10:42:46 [Test worker] INFO c.u.h.s.service.RecordingServiceImpl - 녹음 준비 시작 - meetingId: MEETING-001, sessionId: SESSION-001 +2025-10-29 10:42:46 [Test worker] INFO c.u.h.s.service.RecordingServiceImpl - 녹음 준비 완료 - recordingId: REC-20251029-484 +2025-10-29 10:42:46 [Test worker] INFO c.u.h.s.service.RecordingServiceImpl - 녹음 중지 - recordingId: REC-20250123-001, stoppedBy: user001 +2025-10-29 10:42:46 [Test worker] INFO c.u.h.s.service.RecordingServiceImpl - 녹음 중지 완료 - recordingId: REC-20250123-001, duration: 1800초 +2025-10-29 10:42:46 [Test worker] INFO c.u.h.s.service.RecordingServiceImpl - 녹음 준비 시작 - meetingId: MEETING-001, sessionId: SESSION-001 +2025-10-29 10:42:46 [Test worker] INFO c.u.h.s.service.RecordingServiceImpl - 녹음 시작 - recordingId: REC-20250123-001, startedBy: user001 +2025-10-29 10:42:46 [Test worker] INFO c.u.h.s.service.RecordingServiceImpl - 녹음 시작 - recordingId: REC-20250123-001, startedBy: user001 +2025-10-29 10:42:46 [Test worker] INFO c.u.h.s.service.RecordingServiceImpl - 녹음 시작 완료 - recordingId: REC-20250123-001 +2025-10-29 10:42:46 [Test worker] INFO c.u.h.s.s.TranscriptionServiceImpl - 실시간 음성 변환 처리 - recordingId: REC-20250123-001, timestamp: 1761702166494 +2025-10-29 10:42:46 [Test worker] INFO c.u.h.s.s.TranscriptionServiceImpl - 실시간 음성 변환 처리 - recordingId: REC-20250123-001, timestamp: 1761702166497 +2025-10-29 10:42:46 [Test worker] INFO c.u.h.s.s.TranscriptionServiceImpl - 실시간 음성 변환 완료 - segmentId: TRS-SEG-DDC09733, confidence: 0.9151289758443305 +2025-10-29 10:42:46 [Test worker] INFO c.u.h.s.s.TranscriptionServiceImpl - 실시간 음성 변환 처리 - recordingId: REC-20250123-001, timestamp: 1761702166501 +2025-10-29 10:42:46 [Test worker] INFO c.u.h.s.s.TranscriptionServiceImpl - 실시간 음성 변환 완료 - segmentId: TRS-SEG-B31C0753, confidence: 0.9379223923971018 +2025-10-29 10:42:47 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:42:47 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - 오디오 청크 없음 - meetingId: test-meeting-001 +2025-10-29 10:42:47 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:42:51 [main] INFO c.unicorn.hgzero.stt.SttApplication - Starting SttApplication using Java 23.0.2 with PID 53131 (/Users/jominseo/HGZero/stt/build/classes/java/main started by jominseo in /Users/jominseo/HGZero/stt) +2025-10-29 10:42:51 [main] DEBUG c.unicorn.hgzero.stt.SttApplication - Running with Spring Boot v3.3.5, Spring v6.1.14 +2025-10-29 10:42:51 [main] INFO c.unicorn.hgzero.stt.SttApplication - No active profile set, falling back to 1 default profile: "default" +2025-10-29 10:42:51 [main] INFO o.s.d.r.c.RepositoryConfigurationDelegate - Multiple Spring Data modules found, entering strict repository configuration mode +2025-10-29 10:42:51 [main] INFO o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data JPA repositories in DEFAULT mode. +2025-10-29 10:42:51 [main] INFO o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 38 ms. Found 3 JPA repository interfaces. +2025-10-29 10:42:51 [main] INFO o.s.d.r.c.RepositoryConfigurationDelegate - Multiple Spring Data modules found, entering strict repository configuration mode +2025-10-29 10:42:51 [main] INFO o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data Redis repositories in DEFAULT mode. +2025-10-29 10:42:51 [main] INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.unicorn.hgzero.stt.repository.jpa.RecordingRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-10-29 10:42:51 [main] INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.unicorn.hgzero.stt.repository.jpa.TranscriptSegmentRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-10-29 10:42:51 [main] INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.unicorn.hgzero.stt.repository.jpa.TranscriptionRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository +2025-10-29 10:42:51 [main] INFO o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 6 ms. Found 0 Redis repository interfaces. +2025-10-29 10:42:51 [main] INFO o.s.b.w.e.tomcat.TomcatWebServer - Tomcat initialized with port 8084 (http) +2025-10-29 10:42:51 [main] INFO o.a.catalina.core.StandardService - Starting service [Tomcat] +2025-10-29 10:42:51 [main] INFO o.a.catalina.core.StandardEngine - Starting Servlet engine: [Apache Tomcat/10.1.31] +2025-10-29 10:42:51 [main] INFO o.a.c.c.C.[Tomcat].[localhost].[/] - Initializing Spring embedded WebApplicationContext +2025-10-29 10:42:51 [main] INFO o.s.b.w.s.c.ServletWebServerApplicationContext - Root WebApplicationContext: initialization completed in 649 ms +2025-10-29 10:42:51 [main] INFO o.h.jpa.internal.util.LogHelper - HHH000204: Processing PersistenceUnitInfo [name: default] +2025-10-29 10:42:51 [main] INFO org.hibernate.Version - HHH000412: Hibernate ORM core version 6.5.3.Final +2025-10-29 10:42:51 [main] INFO o.h.c.i.RegionFactoryInitiator - HHH000026: Second-level cache disabled +2025-10-29 10:42:51 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration boolean -> org.hibernate.type.BasicTypeReference@73e399cc +2025-10-29 10:42:51 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration boolean -> org.hibernate.type.BasicTypeReference@73e399cc +2025-10-29 10:42:51 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Boolean -> org.hibernate.type.BasicTypeReference@73e399cc +2025-10-29 10:42:51 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration numeric_boolean -> org.hibernate.type.BasicTypeReference@3dd591b9 +2025-10-29 10:42:51 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration org.hibernate.type.NumericBooleanConverter -> org.hibernate.type.BasicTypeReference@3dd591b9 +2025-10-29 10:42:51 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration true_false -> org.hibernate.type.BasicTypeReference@538905d2 +2025-10-29 10:42:51 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration org.hibernate.type.TrueFalseConverter -> org.hibernate.type.BasicTypeReference@538905d2 +2025-10-29 10:42:51 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration yes_no -> org.hibernate.type.BasicTypeReference@7e8c58fd +2025-10-29 10:42:51 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration org.hibernate.type.YesNoConverter -> org.hibernate.type.BasicTypeReference@7e8c58fd +2025-10-29 10:42:51 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration byte -> org.hibernate.type.BasicTypeReference@11ce9319 +2025-10-29 10:42:51 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration byte -> org.hibernate.type.BasicTypeReference@11ce9319 +2025-10-29 10:42:51 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Byte -> org.hibernate.type.BasicTypeReference@11ce9319 +2025-10-29 10:42:51 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration binary -> org.hibernate.type.BasicTypeReference@780c0 +2025-10-29 10:42:51 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration byte[] -> org.hibernate.type.BasicTypeReference@780c0 +2025-10-29 10:42:51 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration [B -> org.hibernate.type.BasicTypeReference@780c0 +2025-10-29 10:42:51 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration binary_wrapper -> org.hibernate.type.BasicTypeReference@1b3bb287 +2025-10-29 10:42:51 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration wrapper-binary -> org.hibernate.type.BasicTypeReference@1b3bb287 +2025-10-29 10:42:51 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration image -> org.hibernate.type.BasicTypeReference@7ec5aad +2025-10-29 10:42:51 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration blob -> org.hibernate.type.BasicTypeReference@625f5712 +2025-10-29 10:42:51 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.sql.Blob -> org.hibernate.type.BasicTypeReference@625f5712 +2025-10-29 10:42:51 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration materialized_blob -> org.hibernate.type.BasicTypeReference@5e62ca19 +2025-10-29 10:42:51 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration materialized_blob_wrapper -> org.hibernate.type.BasicTypeReference@188bf4d8 +2025-10-29 10:42:51 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration short -> org.hibernate.type.BasicTypeReference@7dd7ec56 +2025-10-29 10:42:51 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration short -> org.hibernate.type.BasicTypeReference@7dd7ec56 +2025-10-29 10:42:51 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Short -> org.hibernate.type.BasicTypeReference@7dd7ec56 +2025-10-29 10:42:51 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration integer -> org.hibernate.type.BasicTypeReference@6528d339 +2025-10-29 10:42:51 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration int -> org.hibernate.type.BasicTypeReference@6528d339 +2025-10-29 10:42:51 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Integer -> org.hibernate.type.BasicTypeReference@6528d339 +2025-10-29 10:42:51 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration long -> org.hibernate.type.BasicTypeReference@2dd2ff87 +2025-10-29 10:42:51 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration long -> org.hibernate.type.BasicTypeReference@2dd2ff87 +2025-10-29 10:42:51 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Long -> org.hibernate.type.BasicTypeReference@2dd2ff87 +2025-10-29 10:42:51 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration float -> org.hibernate.type.BasicTypeReference@6a38e3d1 +2025-10-29 10:42:51 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration float -> org.hibernate.type.BasicTypeReference@6a38e3d1 +2025-10-29 10:42:51 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Float -> org.hibernate.type.BasicTypeReference@6a38e3d1 +2025-10-29 10:42:51 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration double -> org.hibernate.type.BasicTypeReference@28cf179c +2025-10-29 10:42:51 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration double -> org.hibernate.type.BasicTypeReference@28cf179c +2025-10-29 10:42:51 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Double -> org.hibernate.type.BasicTypeReference@28cf179c +2025-10-29 10:42:51 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration big_integer -> org.hibernate.type.BasicTypeReference@bdda8a7 +2025-10-29 10:42:51 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.math.BigInteger -> org.hibernate.type.BasicTypeReference@bdda8a7 +2025-10-29 10:42:51 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration big_decimal -> org.hibernate.type.BasicTypeReference@3149409c +2025-10-29 10:42:51 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.math.BigDecimal -> org.hibernate.type.BasicTypeReference@3149409c +2025-10-29 10:42:51 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration character -> org.hibernate.type.BasicTypeReference@1c421b0f +2025-10-29 10:42:51 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration char -> org.hibernate.type.BasicTypeReference@1c421b0f +2025-10-29 10:42:51 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Character -> org.hibernate.type.BasicTypeReference@1c421b0f +2025-10-29 10:42:51 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration character_nchar -> org.hibernate.type.BasicTypeReference@4ce18cec +2025-10-29 10:42:51 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration string -> org.hibernate.type.BasicTypeReference@2a9f8d47 +2025-10-29 10:42:51 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.String -> org.hibernate.type.BasicTypeReference@2a9f8d47 +2025-10-29 10:42:51 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration nstring -> org.hibernate.type.BasicTypeReference@51297528 +2025-10-29 10:42:51 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration characters -> org.hibernate.type.BasicTypeReference@5d3f8661 +2025-10-29 10:42:51 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration char[] -> org.hibernate.type.BasicTypeReference@5d3f8661 +2025-10-29 10:42:51 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration [C -> org.hibernate.type.BasicTypeReference@5d3f8661 +2025-10-29 10:42:51 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration wrapper-characters -> org.hibernate.type.BasicTypeReference@1df9f7c6 +2025-10-29 10:42:51 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration text -> org.hibernate.type.BasicTypeReference@4b5aa48b +2025-10-29 10:42:51 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration ntext -> org.hibernate.type.BasicTypeReference@51c008fd +2025-10-29 10:42:51 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration clob -> org.hibernate.type.BasicTypeReference@70ed902a +2025-10-29 10:42:51 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.sql.Clob -> org.hibernate.type.BasicTypeReference@70ed902a +2025-10-29 10:42:51 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration nclob -> org.hibernate.type.BasicTypeReference@22f80e36 +2025-10-29 10:42:51 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.sql.NClob -> org.hibernate.type.BasicTypeReference@22f80e36 +2025-10-29 10:42:51 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration materialized_clob -> org.hibernate.type.BasicTypeReference@3c98981e +2025-10-29 10:42:51 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration materialized_clob_char_array -> org.hibernate.type.BasicTypeReference@6dcee890 +2025-10-29 10:42:51 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration materialized_clob_character_array -> org.hibernate.type.BasicTypeReference@713e49c3 +2025-10-29 10:42:51 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration materialized_nclob -> org.hibernate.type.BasicTypeReference@13d5606c +2025-10-29 10:42:51 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration materialized_nclob_character_array -> org.hibernate.type.BasicTypeReference@6bf54260 +2025-10-29 10:42:51 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration materialized_nclob_char_array -> org.hibernate.type.BasicTypeReference@7165bde6 +2025-10-29 10:42:51 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration Duration -> org.hibernate.type.BasicTypeReference@72168258 +2025-10-29 10:42:51 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.Duration -> org.hibernate.type.BasicTypeReference@72168258 +2025-10-29 10:42:51 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration LocalDateTime -> org.hibernate.type.BasicTypeReference@4af84a76 +2025-10-29 10:42:51 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.LocalDateTime -> org.hibernate.type.BasicTypeReference@4af84a76 +2025-10-29 10:42:51 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration LocalDate -> org.hibernate.type.BasicTypeReference@b5ff70b +2025-10-29 10:42:51 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.LocalDate -> org.hibernate.type.BasicTypeReference@b5ff70b +2025-10-29 10:42:51 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration LocalTime -> org.hibernate.type.BasicTypeReference@5709e10b +2025-10-29 10:42:51 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.LocalTime -> org.hibernate.type.BasicTypeReference@5709e10b +2025-10-29 10:42:51 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration OffsetDateTime -> org.hibernate.type.BasicTypeReference@114badf0 +2025-10-29 10:42:51 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.OffsetDateTime -> org.hibernate.type.BasicTypeReference@114badf0 +2025-10-29 10:42:51 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration OffsetDateTimeWithTimezone -> org.hibernate.type.BasicTypeReference@19e8fe55 +2025-10-29 10:42:51 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration OffsetDateTimeWithoutTimezone -> org.hibernate.type.BasicTypeReference@6d7bb5cc +2025-10-29 10:42:51 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration OffsetTime -> org.hibernate.type.BasicTypeReference@756200d1 +2025-10-29 10:42:51 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.OffsetTime -> org.hibernate.type.BasicTypeReference@756200d1 +2025-10-29 10:42:51 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration OffsetTimeUtc -> org.hibernate.type.BasicTypeReference@390a07a0 +2025-10-29 10:42:51 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration OffsetTimeWithTimezone -> org.hibernate.type.BasicTypeReference@674e4c82 +2025-10-29 10:42:51 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration OffsetTimeWithoutTimezone -> org.hibernate.type.BasicTypeReference@572b4072 +2025-10-29 10:42:51 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration ZonedDateTime -> org.hibernate.type.BasicTypeReference@322ab6ce +2025-10-29 10:42:51 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.ZonedDateTime -> org.hibernate.type.BasicTypeReference@322ab6ce +2025-10-29 10:42:51 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration ZonedDateTimeWithTimezone -> org.hibernate.type.BasicTypeReference@5b74902c +2025-10-29 10:42:51 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration ZonedDateTimeWithoutTimezone -> org.hibernate.type.BasicTypeReference@4e4bfd9c +2025-10-29 10:42:51 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration date -> org.hibernate.type.BasicTypeReference@43ee1cf7 +2025-10-29 10:42:51 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.sql.Date -> org.hibernate.type.BasicTypeReference@43ee1cf7 +2025-10-29 10:42:51 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration time -> org.hibernate.type.BasicTypeReference@24954e82 +2025-10-29 10:42:51 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.sql.Time -> org.hibernate.type.BasicTypeReference@24954e82 +2025-10-29 10:42:51 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration timestamp -> org.hibernate.type.BasicTypeReference@5b1f5fcc +2025-10-29 10:42:51 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.sql.Timestamp -> org.hibernate.type.BasicTypeReference@5b1f5fcc +2025-10-29 10:42:51 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.util.Date -> org.hibernate.type.BasicTypeReference@5b1f5fcc +2025-10-29 10:42:51 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration calendar -> org.hibernate.type.BasicTypeReference@4a29fe2e +2025-10-29 10:42:51 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.util.Calendar -> org.hibernate.type.BasicTypeReference@4a29fe2e +2025-10-29 10:42:51 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.util.GregorianCalendar -> org.hibernate.type.BasicTypeReference@4a29fe2e +2025-10-29 10:42:51 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration calendar_date -> org.hibernate.type.BasicTypeReference@79135a38 +2025-10-29 10:42:51 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration calendar_time -> org.hibernate.type.BasicTypeReference@77fceac6 +2025-10-29 10:42:51 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration instant -> org.hibernate.type.BasicTypeReference@563c3aca +2025-10-29 10:42:51 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.Instant -> org.hibernate.type.BasicTypeReference@563c3aca +2025-10-29 10:42:51 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration uuid -> org.hibernate.type.BasicTypeReference@53e166ad +2025-10-29 10:42:51 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.util.UUID -> org.hibernate.type.BasicTypeReference@53e166ad +2025-10-29 10:42:51 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration pg-uuid -> org.hibernate.type.BasicTypeReference@53e166ad +2025-10-29 10:42:51 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration uuid-binary -> org.hibernate.type.BasicTypeReference@30c03473 +2025-10-29 10:42:51 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration uuid-char -> org.hibernate.type.BasicTypeReference@20fa5277 +2025-10-29 10:42:51 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration class -> org.hibernate.type.BasicTypeReference@17a7d6c8 +2025-10-29 10:42:51 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Class -> org.hibernate.type.BasicTypeReference@17a7d6c8 +2025-10-29 10:42:51 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration currency -> org.hibernate.type.BasicTypeReference@4f2b1e9f +2025-10-29 10:42:51 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration Currency -> org.hibernate.type.BasicTypeReference@4f2b1e9f +2025-10-29 10:42:51 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.util.Currency -> org.hibernate.type.BasicTypeReference@4f2b1e9f +2025-10-29 10:42:51 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration locale -> org.hibernate.type.BasicTypeReference@7ef9c8a5 +2025-10-29 10:42:51 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.util.Locale -> org.hibernate.type.BasicTypeReference@7ef9c8a5 +2025-10-29 10:42:51 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration serializable -> org.hibernate.type.BasicTypeReference@c6244e7 +2025-10-29 10:42:51 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.io.Serializable -> org.hibernate.type.BasicTypeReference@c6244e7 +2025-10-29 10:42:51 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration timezone -> org.hibernate.type.BasicTypeReference@25dad235 +2025-10-29 10:42:51 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.util.TimeZone -> org.hibernate.type.BasicTypeReference@25dad235 +2025-10-29 10:42:51 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration ZoneOffset -> org.hibernate.type.BasicTypeReference@3292eff7 +2025-10-29 10:42:51 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.ZoneOffset -> org.hibernate.type.BasicTypeReference@3292eff7 +2025-10-29 10:42:51 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration url -> org.hibernate.type.BasicTypeReference@29ea5e0 +2025-10-29 10:42:51 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.net.URL -> org.hibernate.type.BasicTypeReference@29ea5e0 +2025-10-29 10:42:51 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration vector -> org.hibernate.type.BasicTypeReference@1c459c28 +2025-10-29 10:42:51 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration row_version -> org.hibernate.type.BasicTypeReference@6ffdbeef +2025-10-29 10:42:51 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration object -> org.hibernate.type.JavaObjectType@1c0680b0 +2025-10-29 10:42:51 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Object -> org.hibernate.type.JavaObjectType@1c0680b0 +2025-10-29 10:42:51 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration null -> org.hibernate.type.NullType@7c840fe3 +2025-10-29 10:42:51 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration imm_date -> org.hibernate.type.BasicTypeReference@59014efe +2025-10-29 10:42:51 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration imm_time -> org.hibernate.type.BasicTypeReference@7381d6f0 +2025-10-29 10:42:51 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration imm_timestamp -> org.hibernate.type.BasicTypeReference@2f262474 +2025-10-29 10:42:51 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration imm_calendar -> org.hibernate.type.BasicTypeReference@7c03f9d0 +2025-10-29 10:42:51 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration imm_calendar_date -> org.hibernate.type.BasicTypeReference@6ad3fbe4 +2025-10-29 10:42:51 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration imm_calendar_time -> org.hibernate.type.BasicTypeReference@17189618 +2025-10-29 10:42:51 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration imm_binary -> org.hibernate.type.BasicTypeReference@983050b +2025-10-29 10:42:51 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration imm_serializable -> org.hibernate.type.BasicTypeReference@6aadb092 +2025-10-29 10:42:52 [main] INFO o.s.o.j.p.SpringPersistenceUnitInfo - No LoadTimeWeaver setup: ignoring JPA class transformer +2025-10-29 10:42:52 [main] INFO com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Starting... +2025-10-29 10:42:52 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:42:52 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - 오디오 청크 없음 - meetingId: test-meeting-001 +2025-10-29 10:42:52 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:42:52 [main] INFO com.zaxxer.hikari.pool.HikariPool - HikariPool-1 - Added connection org.postgresql.jdbc.PgConnection@1ba3c03d +2025-10-29 10:42:52 [main] INFO com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Start completed. +2025-10-29 10:42:52 [main] WARN org.hibernate.orm.deprecation - HHH90000025: PostgreSQLDialect does not need to be specified explicitly using 'hibernate.dialect' (remove the property setting and it will be selected by default) +2025-10-29 10:42:52 [main] DEBUG o.h.t.d.sql.spi.DdlTypeRegistry - addDescriptor(2003, org.hibernate.type.descriptor.sql.internal.ArrayDdlTypeImpl@5020b59f) replaced previous registration(org.hibernate.type.descriptor.sql.internal.ArrayDdlTypeImpl@75db328e) +2025-10-29 10:42:52 [main] DEBUG o.h.t.d.sql.spi.DdlTypeRegistry - addDescriptor(6, org.hibernate.type.descriptor.sql.internal.CapacityDependentDdlType@46d18a33) replaced previous registration(org.hibernate.type.descriptor.sql.internal.DdlTypeImpl@495f3965) +2025-10-29 10:42:52 [main] DEBUG o.h.t.d.jdbc.spi.JdbcTypeRegistry - addDescriptor(2004, BlobTypeDescriptor(BLOB_BINDING)) replaced previous registration(BlobTypeDescriptor(DEFAULT)) +2025-10-29 10:42:52 [main] DEBUG o.h.t.d.jdbc.spi.JdbcTypeRegistry - addDescriptor(2005, ClobTypeDescriptor(CLOB_BINDING)) replaced previous registration(ClobTypeDescriptor(DEFAULT)) +2025-10-29 10:42:52 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration JAVA_OBJECT -> org.hibernate.type.JavaObjectType@328bc067 +2025-10-29 10:42:52 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Object -> org.hibernate.type.JavaObjectType@328bc067 +2025-10-29 10:42:52 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Type registration key [java.lang.Object] overrode previous entry : `org.hibernate.type.JavaObjectType@1c0680b0` +2025-10-29 10:42:52 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration org.hibernate.type.DurationType -> basicType@1(java.time.Duration,3015) +2025-10-29 10:42:52 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration Duration -> basicType@1(java.time.Duration,3015) +2025-10-29 10:42:52 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.Duration -> basicType@1(java.time.Duration,3015) +2025-10-29 10:42:52 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration org.hibernate.type.OffsetDateTimeType -> basicType@2(java.time.OffsetDateTime,3003) +2025-10-29 10:42:52 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration OffsetDateTime -> basicType@2(java.time.OffsetDateTime,3003) +2025-10-29 10:42:52 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.OffsetDateTime -> basicType@2(java.time.OffsetDateTime,3003) +2025-10-29 10:42:52 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration org.hibernate.type.ZonedDateTimeType -> basicType@3(java.time.ZonedDateTime,3003) +2025-10-29 10:42:52 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration ZonedDateTime -> basicType@3(java.time.ZonedDateTime,3003) +2025-10-29 10:42:52 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.ZonedDateTime -> basicType@3(java.time.ZonedDateTime,3003) +2025-10-29 10:42:52 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration org.hibernate.type.OffsetTimeType -> basicType@4(java.time.OffsetTime,3007) +2025-10-29 10:42:52 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration OffsetTime -> basicType@4(java.time.OffsetTime,3007) +2025-10-29 10:42:52 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.OffsetTime -> basicType@4(java.time.OffsetTime,3007) +2025-10-29 10:42:52 [main] DEBUG o.h.type.spi.TypeConfiguration$Scope - Scoping TypeConfiguration [org.hibernate.type.spi.TypeConfiguration@71098fb3] to MetadataBuildingContext [org.hibernate.boot.internal.MetadataBuildingContextRootImpl@75e92bb7] +2025-10-29 10:42:52 [main] INFO o.h.e.t.j.p.i.JtaPlatformInitiator - HHH000489: No JTA platform available (set 'hibernate.transaction.jta.platform' to enable JTA platform integration) +2025-10-29 10:42:52 [main] DEBUG o.h.type.spi.TypeConfiguration$Scope - Scoping TypeConfiguration [org.hibernate.type.spi.TypeConfiguration@71098fb3] to SessionFactoryImplementor [org.hibernate.internal.SessionFactoryImpl@60515ab1] +2025-10-29 10:42:52 [main] DEBUG org.hibernate.SQL - + alter table if exists transcript_segments + alter column text set data type TEXT +2025-10-29 10:42:52 [main] DEBUG org.hibernate.SQL - + alter table if exists transcriptions + alter column full_text set data type TEXT +2025-10-29 10:42:52 [main] TRACE o.h.type.spi.TypeConfiguration$Scope - Handling #sessionFactoryCreated from [org.hibernate.internal.SessionFactoryImpl@60515ab1] for TypeConfiguration +2025-10-29 10:42:52 [main] INFO o.s.o.j.LocalContainerEntityManagerFactoryBean - Initialized JPA EntityManagerFactory for persistence unit 'default' +2025-10-29 10:42:52 [main] ERROR i.n.r.d.DnsServerAddressStreamProviders - Unable to load io.netty.resolver.dns.macos.MacOSDnsServerAddressStreamProvider, fallback to system defaults. This may result in incorrect DNS resolutions on MacOS. Check whether you have a dependency on 'io.netty:netty-resolver-dns-native-macos'. Use DEBUG level to see the full stack: java.lang.UnsatisfiedLinkError: failed to load the required native library +2025-10-29 10:42:52 [main] INFO o.s.d.j.r.query.QueryEnhancerFactory - Hibernate is in classpath; If applicable, HQL parser will be used. +2025-10-29 10:42:53 [main] INFO c.u.h.stt.service.AzureSpeechService - Azure Speech Service 초기화 시작 - subscriptionKey: 미설정, region: eastus +2025-10-29 10:42:53 [main] WARN c.u.h.stt.service.AzureSpeechService - Azure Speech Subscription Key 미설정 - 시뮬레이션 모드로 실행 +2025-10-29 10:42:53 [main] WARN o.s.b.a.o.j.JpaBaseConfiguration$JpaWebConfiguration - spring.jpa.open-in-view is enabled by default. Therefore, database queries may be performed during view rendering. Explicitly configure spring.jpa.open-in-view to disable this warning +2025-10-29 10:42:53 [main] WARN o.s.b.a.s.s.UserDetailsServiceAutoConfiguration - + +Using generated security password: cccf669d-0aca-4fe4-925d-12f274dd37ee + +This generated password is for development use only. Your security configuration must be updated before running your application in production. + +2025-10-29 10:42:53 [main] INFO o.s.s.c.a.a.c.InitializeUserDetailsBeanManagerConfigurer$InitializeUserDetailsManagerConfigurer - Global AuthenticationManager configured with UserDetailsService bean with name inMemoryUserDetailsManager +2025-10-29 10:42:53 [main] INFO o.s.b.a.e.web.EndpointLinksResolver - Exposing 3 endpoints beneath base path '/actuator' +2025-10-29 10:42:53 [main] WARN o.s.b.w.s.c.AnnotationConfigServletWebServerApplicationContext - Exception encountered during context initialization - cancelling refresh attempt: org.springframework.context.ApplicationContextException: Failed to start bean 'webServerStartStop' +2025-10-29 10:42:53 [main] INFO o.s.o.j.LocalContainerEntityManagerFactoryBean - Closing JPA EntityManagerFactory for persistence unit 'default' +2025-10-29 10:42:53 [main] TRACE o.h.type.spi.TypeConfiguration$Scope - Handling #sessionFactoryClosed from [org.hibernate.internal.SessionFactoryImpl@60515ab1] for TypeConfiguration +2025-10-29 10:42:53 [main] DEBUG o.h.type.spi.TypeConfiguration$Scope - Un-scoping TypeConfiguration [org.hibernate.type.spi.TypeConfiguration$Scope@59b0d24d] from SessionFactory [org.hibernate.internal.SessionFactoryImpl@60515ab1] +2025-10-29 10:42:53 [main] INFO com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Shutdown initiated... +2025-10-29 10:42:53 [main] INFO com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Shutdown completed. +2025-10-29 10:42:53 [main] INFO o.s.b.a.l.ConditionEvaluationReportLogger - + +Error starting ApplicationContext. To display the condition evaluation report re-run your application with 'debug' enabled. +2025-10-29 10:42:53 [main] ERROR o.s.b.d.LoggingFailureAnalysisReporter - + +*************************** +APPLICATION FAILED TO START +*************************** + +Description: + +Web server failed to start. Port 8084 was already in use. + +Action: + +Identify and stop the process that's listening on port 8084 or configure this application to listen on another port. + +2025-10-29 10:42:57 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:42:57 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - 오디오 청크 없음 - meetingId: test-meeting-001 +2025-10-29 10:42:57 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:43:02 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:43:02 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - 오디오 청크 없음 - meetingId: test-meeting-001 +2025-10-29 10:43:02 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:43:07 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:43:07 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - 오디오 청크 없음 - meetingId: test-meeting-001 +2025-10-29 10:43:07 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:43:12 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:43:12 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - 오디오 청크 없음 - meetingId: test-meeting-001 +2025-10-29 10:43:12 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:43:12 [http-nio-8084-exec-2] INFO c.u.h.s.c.AudioWebSocketHandler - WebSocket 연결 성공 - sessionId: 780fc2cf-e314-1144-270b-7fddec910c54 +2025-10-29 10:43:15 [http-nio-8084-exec-3] INFO c.u.h.s.c.AudioWebSocketHandler - 녹음 시작 - sessionId: 780fc2cf-e314-1144-270b-7fddec910c54, meetingId: test-meeting-001 +2025-10-29 10:43:15 [http-nio-8084-exec-4] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 0 +2025-10-29 10:43:15 [http-nio-8084-exec-4] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 0, size: 8236 bytes +2025-10-29 10:43:16 [http-nio-8084-exec-5] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 1 +2025-10-29 10:43:16 [http-nio-8084-exec-5] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 1, size: 8236 bytes +2025-10-29 10:43:16 [http-nio-8084-exec-6] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 2 +2025-10-29 10:43:16 [http-nio-8084-exec-6] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 2, size: 8236 bytes +2025-10-29 10:43:16 [http-nio-8084-exec-7] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 3 +2025-10-29 10:43:16 [http-nio-8084-exec-7] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 3, size: 8236 bytes +2025-10-29 10:43:16 [http-nio-8084-exec-8] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 4 +2025-10-29 10:43:16 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 4, size: 8236 bytes +2025-10-29 10:43:17 [http-nio-8084-exec-9] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 5 +2025-10-29 10:43:17 [http-nio-8084-exec-9] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 5, size: 8236 bytes +2025-10-29 10:43:17 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:43:17 [scheduling-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 조회 완료 - meetingId: test-meeting-001, count: 6 +2025-10-29 10:43:17 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 오디오 청크 조회 완료 - meetingId: test-meeting-001, chunks: 6개 +2025-10-29 10:43:17 [scheduling-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 병합 완료 - chunks: 6, totalSize: 49416 +2025-10-29 10:43:17 [http-nio-8084-exec-10] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 6 +2025-10-29 10:43:17 [http-nio-8084-exec-10] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 6, size: 8236 bytes +2025-10-29 10:43:17 [http-nio-8084-exec-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 7 +2025-10-29 10:43:17 [http-nio-8084-exec-1] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 7, size: 8236 bytes +2025-10-29 10:43:17 [http-nio-8084-exec-2] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 8 +2025-10-29 10:43:17 [http-nio-8084-exec-2] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 8, size: 8236 bytes +2025-10-29 10:43:18 [http-nio-8084-exec-3] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 9 +2025-10-29 10:43:18 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 9, size: 8236 bytes +2025-10-29 10:43:18 [http-nio-8084-exec-4] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 10 +2025-10-29 10:43:18 [http-nio-8084-exec-4] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 10, size: 8236 bytes +2025-10-29 10:43:18 [http-nio-8084-exec-5] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 11 +2025-10-29 10:43:18 [http-nio-8084-exec-5] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 11, size: 8236 bytes +2025-10-29 10:43:19 [http-nio-8084-exec-6] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 12 +2025-10-29 10:43:19 [http-nio-8084-exec-6] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 12, size: 8236 bytes +2025-10-29 10:43:19 [http-nio-8084-exec-7] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 13 +2025-10-29 10:43:19 [http-nio-8084-exec-7] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 13, size: 8236 bytes +2025-10-29 10:43:19 [scheduling-1] DEBUG c.u.h.stt.service.AzureSpeechService - 음성 인식 실패 - NoMatch (무음 또는 인식 불가) +2025-10-29 10:43:19 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - 음성 인식 결과 없음 - meetingId: test-meeting-001 +2025-10-29 10:43:19 [scheduling-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 삭제 완료 - meetingId: test-meeting-001 +2025-10-29 10:43:19 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:43:19 [http-nio-8084-exec-8] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 14 +2025-10-29 10:43:19 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 14, size: 8236 bytes +2025-10-29 10:43:19 [http-nio-8084-exec-9] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 15 +2025-10-29 10:43:19 [http-nio-8084-exec-9] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 15, size: 8236 bytes +2025-10-29 10:43:20 [http-nio-8084-exec-10] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 16 +2025-10-29 10:43:20 [http-nio-8084-exec-10] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 16, size: 8236 bytes +2025-10-29 10:43:20 [http-nio-8084-exec-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 17 +2025-10-29 10:43:20 [http-nio-8084-exec-1] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 17, size: 8236 bytes +2025-10-29 10:43:20 [http-nio-8084-exec-2] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 18 +2025-10-29 10:43:20 [http-nio-8084-exec-2] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 18, size: 8236 bytes +2025-10-29 10:43:20 [http-nio-8084-exec-3] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 19 +2025-10-29 10:43:20 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 19, size: 8236 bytes +2025-10-29 10:43:21 [http-nio-8084-exec-4] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 20 +2025-10-29 10:43:21 [http-nio-8084-exec-4] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 20, size: 8236 bytes +2025-10-29 10:43:21 [http-nio-8084-exec-5] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 21 +2025-10-29 10:43:21 [http-nio-8084-exec-5] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 21, size: 8236 bytes +2025-10-29 10:43:21 [http-nio-8084-exec-6] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 22 +2025-10-29 10:43:21 [http-nio-8084-exec-6] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 22, size: 8236 bytes +2025-10-29 10:43:21 [http-nio-8084-exec-7] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 23 +2025-10-29 10:43:21 [http-nio-8084-exec-7] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 23, size: 8236 bytes +2025-10-29 10:43:22 [http-nio-8084-exec-8] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 24 +2025-10-29 10:43:22 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 24, size: 8236 bytes +2025-10-29 10:43:22 [http-nio-8084-exec-9] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 25 +2025-10-29 10:43:22 [http-nio-8084-exec-9] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 25, size: 8236 bytes +2025-10-29 10:43:22 [http-nio-8084-exec-10] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 26 +2025-10-29 10:43:22 [http-nio-8084-exec-10] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 26, size: 8236 bytes +2025-10-29 10:43:22 [http-nio-8084-exec-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 27 +2025-10-29 10:43:22 [http-nio-8084-exec-1] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 27, size: 8236 bytes +2025-10-29 10:43:23 [http-nio-8084-exec-2] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 28 +2025-10-29 10:43:23 [http-nio-8084-exec-2] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 28, size: 8236 bytes +2025-10-29 10:43:23 [http-nio-8084-exec-3] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 29 +2025-10-29 10:43:23 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 29, size: 8236 bytes +2025-10-29 10:43:23 [http-nio-8084-exec-4] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 30 +2025-10-29 10:43:23 [http-nio-8084-exec-4] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 30, size: 8236 bytes +2025-10-29 10:43:23 [http-nio-8084-exec-5] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 31 +2025-10-29 10:43:23 [http-nio-8084-exec-5] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 31, size: 8236 bytes +2025-10-29 10:43:24 [http-nio-8084-exec-6] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 32 +2025-10-29 10:43:24 [http-nio-8084-exec-6] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 32, size: 8236 bytes +2025-10-29 10:43:24 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:43:24 [scheduling-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 조회 완료 - meetingId: test-meeting-001, count: 19 +2025-10-29 10:43:24 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 오디오 청크 조회 완료 - meetingId: test-meeting-001, chunks: 19개 +2025-10-29 10:43:24 [scheduling-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 병합 완료 - chunks: 19, totalSize: 156484 +2025-10-29 10:43:24 [http-nio-8084-exec-7] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 33 +2025-10-29 10:43:24 [http-nio-8084-exec-7] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 33, size: 8236 bytes +2025-10-29 10:43:24 [http-nio-8084-exec-8] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 34 +2025-10-29 10:43:24 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 34, size: 8236 bytes +2025-10-29 10:43:24 [http-nio-8084-exec-9] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 35 +2025-10-29 10:43:24 [http-nio-8084-exec-9] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 35, size: 8236 bytes +2025-10-29 10:43:25 [http-nio-8084-exec-10] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 36 +2025-10-29 10:43:25 [http-nio-8084-exec-10] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 36, size: 8236 bytes +2025-10-29 10:43:25 [http-nio-8084-exec-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 37 +2025-10-29 10:43:25 [http-nio-8084-exec-1] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 37, size: 8236 bytes +2025-10-29 10:43:25 [http-nio-8084-exec-2] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 38 +2025-10-29 10:43:25 [http-nio-8084-exec-2] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 38, size: 8236 bytes +2025-10-29 10:43:25 [http-nio-8084-exec-3] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 39 +2025-10-29 10:43:25 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 39, size: 8236 bytes +2025-10-29 10:43:26 [http-nio-8084-exec-4] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 40 +2025-10-29 10:43:26 [http-nio-8084-exec-4] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 40, size: 8236 bytes +2025-10-29 10:43:26 [http-nio-8084-exec-5] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 41 +2025-10-29 10:43:26 [http-nio-8084-exec-5] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 41, size: 8236 bytes +2025-10-29 10:43:26 [http-nio-8084-exec-6] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 42 +2025-10-29 10:43:26 [http-nio-8084-exec-6] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 42, size: 8236 bytes +2025-10-29 10:43:26 [http-nio-8084-exec-7] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 43 +2025-10-29 10:43:26 [http-nio-8084-exec-7] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 43, size: 8236 bytes +2025-10-29 10:43:27 [http-nio-8084-exec-8] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 44 +2025-10-29 10:43:27 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 44, size: 8236 bytes +2025-10-29 10:43:27 [scheduling-1] DEBUG c.u.h.stt.service.AzureSpeechService - 음성 인식 실패 - NoMatch (무음 또는 인식 불가) +2025-10-29 10:43:27 [http-nio-8084-exec-9] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 45 +2025-10-29 10:43:27 [http-nio-8084-exec-9] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 45, size: 8236 bytes +2025-10-29 10:43:27 [http-nio-8084-exec-10] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 46 +2025-10-29 10:43:27 [http-nio-8084-exec-10] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 46, size: 8236 bytes +2025-10-29 10:43:27 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - 음성 인식 결과 없음 - meetingId: test-meeting-001 +2025-10-29 10:43:27 [scheduling-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 삭제 완료 - meetingId: test-meeting-001 +2025-10-29 10:43:27 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:43:27 [http-nio-8084-exec-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 47 +2025-10-29 10:43:27 [http-nio-8084-exec-1] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 47, size: 8236 bytes +2025-10-29 10:43:28 [http-nio-8084-exec-2] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 48 +2025-10-29 10:43:28 [http-nio-8084-exec-2] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 48, size: 8236 bytes +2025-10-29 10:43:28 [http-nio-8084-exec-3] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 49 +2025-10-29 10:43:28 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 49, size: 8236 bytes +2025-10-29 10:43:28 [http-nio-8084-exec-4] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 50 +2025-10-29 10:43:28 [http-nio-8084-exec-4] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 50, size: 8236 bytes +2025-10-29 10:43:29 [http-nio-8084-exec-5] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 51 +2025-10-29 10:43:29 [http-nio-8084-exec-5] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 51, size: 8236 bytes +2025-10-29 10:43:29 [http-nio-8084-exec-6] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 52 +2025-10-29 10:43:29 [http-nio-8084-exec-6] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 52, size: 8236 bytes +2025-10-29 10:43:29 [http-nio-8084-exec-7] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 53 +2025-10-29 10:43:29 [http-nio-8084-exec-7] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 53, size: 8236 bytes +2025-10-29 10:43:29 [http-nio-8084-exec-8] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 54 +2025-10-29 10:43:29 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 54, size: 8236 bytes +2025-10-29 10:43:30 [http-nio-8084-exec-9] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 55 +2025-10-29 10:43:30 [http-nio-8084-exec-9] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 55, size: 8236 bytes +2025-10-29 10:43:30 [http-nio-8084-exec-10] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 56 +2025-10-29 10:43:30 [http-nio-8084-exec-10] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 56, size: 8236 bytes +2025-10-29 10:43:30 [http-nio-8084-exec-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 57 +2025-10-29 10:43:30 [http-nio-8084-exec-1] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 57, size: 8236 bytes +2025-10-29 10:43:30 [http-nio-8084-exec-2] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 58 +2025-10-29 10:43:30 [http-nio-8084-exec-2] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 58, size: 8236 bytes +2025-10-29 10:43:31 [http-nio-8084-exec-3] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 59 +2025-10-29 10:43:31 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 59, size: 8236 bytes +2025-10-29 10:43:31 [http-nio-8084-exec-4] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 60 +2025-10-29 10:43:31 [http-nio-8084-exec-4] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 60, size: 8236 bytes +2025-10-29 10:43:31 [http-nio-8084-exec-5] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 61 +2025-10-29 10:43:31 [http-nio-8084-exec-5] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 61, size: 8236 bytes +2025-10-29 10:43:31 [http-nio-8084-exec-6] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 62 +2025-10-29 10:43:31 [http-nio-8084-exec-6] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 62, size: 8236 bytes +2025-10-29 10:43:32 [http-nio-8084-exec-7] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 63 +2025-10-29 10:43:32 [http-nio-8084-exec-7] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 63, size: 8236 bytes +2025-10-29 10:43:32 [http-nio-8084-exec-8] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 64 +2025-10-29 10:43:32 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 64, size: 8236 bytes +2025-10-29 10:43:32 [http-nio-8084-exec-9] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 65 +2025-10-29 10:43:32 [http-nio-8084-exec-9] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 65, size: 8236 bytes +2025-10-29 10:43:32 [http-nio-8084-exec-10] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 66 +2025-10-29 10:43:32 [http-nio-8084-exec-10] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 66, size: 8236 bytes +2025-10-29 10:43:32 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:43:33 [scheduling-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 조회 완료 - meetingId: test-meeting-001, count: 20 +2025-10-29 10:43:33 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 오디오 청크 조회 완료 - meetingId: test-meeting-001, chunks: 20개 +2025-10-29 10:43:33 [scheduling-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 병합 완료 - chunks: 20, totalSize: 164720 +2025-10-29 10:43:33 [http-nio-8084-exec-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 67 +2025-10-29 10:43:33 [http-nio-8084-exec-1] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 67, size: 8236 bytes +2025-10-29 10:43:33 [http-nio-8084-exec-2] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 68 +2025-10-29 10:43:33 [http-nio-8084-exec-2] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 68, size: 8236 bytes +2025-10-29 10:43:33 [http-nio-8084-exec-3] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 69 +2025-10-29 10:43:33 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 69, size: 8236 bytes +2025-10-29 10:43:33 [http-nio-8084-exec-4] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 70 +2025-10-29 10:43:33 [http-nio-8084-exec-4] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 70, size: 8236 bytes +2025-10-29 10:43:34 [http-nio-8084-exec-5] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 71 +2025-10-29 10:43:34 [http-nio-8084-exec-5] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 71, size: 8236 bytes +2025-10-29 10:43:34 [http-nio-8084-exec-6] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 72 +2025-10-29 10:43:34 [http-nio-8084-exec-6] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 72, size: 8236 bytes +2025-10-29 10:43:34 [http-nio-8084-exec-7] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 73 +2025-10-29 10:43:34 [http-nio-8084-exec-7] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 73, size: 8236 bytes +2025-10-29 10:43:34 [http-nio-8084-exec-8] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 74 +2025-10-29 10:43:34 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 74, size: 8236 bytes +2025-10-29 10:43:35 [scheduling-1] DEBUG c.u.h.stt.service.AzureSpeechService - 음성 인식 실패 - NoMatch (무음 또는 인식 불가) +2025-10-29 10:43:35 [http-nio-8084-exec-9] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 75 +2025-10-29 10:43:35 [http-nio-8084-exec-9] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 75, size: 8236 bytes +2025-10-29 10:43:35 [http-nio-8084-exec-10] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 76 +2025-10-29 10:43:35 [http-nio-8084-exec-10] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 76, size: 8236 bytes +2025-10-29 10:43:35 [http-nio-8084-exec-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 77 +2025-10-29 10:43:35 [http-nio-8084-exec-1] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 77, size: 8236 bytes +2025-10-29 10:43:35 [http-nio-8084-exec-2] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 78 +2025-10-29 10:43:35 [http-nio-8084-exec-2] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 78, size: 8236 bytes +2025-10-29 10:43:36 [http-nio-8084-exec-3] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 79 +2025-10-29 10:43:36 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 79, size: 8236 bytes +2025-10-29 10:43:36 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - 음성 인식 결과 없음 - meetingId: test-meeting-001 +2025-10-29 10:43:36 [scheduling-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 삭제 완료 - meetingId: test-meeting-001 +2025-10-29 10:43:36 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:43:36 [http-nio-8084-exec-4] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 80 +2025-10-29 10:43:36 [http-nio-8084-exec-4] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 80, size: 8236 bytes +2025-10-29 10:43:36 [http-nio-8084-exec-5] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 81 +2025-10-29 10:43:36 [http-nio-8084-exec-5] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 81, size: 8236 bytes +2025-10-29 10:43:36 [http-nio-8084-exec-6] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 82 +2025-10-29 10:43:36 [http-nio-8084-exec-6] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 82, size: 8236 bytes +2025-10-29 10:43:37 [http-nio-8084-exec-7] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 83 +2025-10-29 10:43:37 [http-nio-8084-exec-7] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 83, size: 8236 bytes +2025-10-29 10:43:37 [http-nio-8084-exec-8] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 84 +2025-10-29 10:43:37 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 84, size: 8236 bytes +2025-10-29 10:43:37 [http-nio-8084-exec-9] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 85 +2025-10-29 10:43:37 [http-nio-8084-exec-9] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 85, size: 8236 bytes +2025-10-29 10:43:37 [http-nio-8084-exec-10] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 86 +2025-10-29 10:43:37 [http-nio-8084-exec-10] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 86, size: 8236 bytes +2025-10-29 10:43:38 [http-nio-8084-exec-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 87 +2025-10-29 10:43:38 [http-nio-8084-exec-1] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 87, size: 8236 bytes +2025-10-29 10:43:38 [http-nio-8084-exec-2] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 88 +2025-10-29 10:43:38 [http-nio-8084-exec-2] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 88, size: 8236 bytes +2025-10-29 10:43:38 [http-nio-8084-exec-3] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 89 +2025-10-29 10:43:38 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 89, size: 8236 bytes +2025-10-29 10:43:39 [http-nio-8084-exec-4] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 90 +2025-10-29 10:43:39 [http-nio-8084-exec-4] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 90, size: 8236 bytes +2025-10-29 10:43:39 [http-nio-8084-exec-5] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 91 +2025-10-29 10:43:39 [http-nio-8084-exec-5] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 91, size: 8236 bytes +2025-10-29 10:43:39 [http-nio-8084-exec-6] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 92 +2025-10-29 10:43:39 [http-nio-8084-exec-6] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 92, size: 8236 bytes +2025-10-29 10:43:39 [http-nio-8084-exec-7] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 93 +2025-10-29 10:43:39 [http-nio-8084-exec-7] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 93, size: 8236 bytes +2025-10-29 10:43:40 [http-nio-8084-exec-8] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 94 +2025-10-29 10:43:40 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 94, size: 8236 bytes +2025-10-29 10:43:40 [http-nio-8084-exec-9] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 95 +2025-10-29 10:43:40 [http-nio-8084-exec-9] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 95, size: 8236 bytes +2025-10-29 10:43:40 [http-nio-8084-exec-10] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 96 +2025-10-29 10:43:40 [http-nio-8084-exec-10] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 96, size: 8236 bytes +2025-10-29 10:43:40 [http-nio-8084-exec-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 97 +2025-10-29 10:43:40 [http-nio-8084-exec-1] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 97, size: 8236 bytes +2025-10-29 10:43:41 [http-nio-8084-exec-2] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 98 +2025-10-29 10:43:41 [http-nio-8084-exec-2] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 98, size: 8236 bytes +2025-10-29 10:43:41 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:43:41 [http-nio-8084-exec-3] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 99 +2025-10-29 10:43:41 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 99, size: 8236 bytes +2025-10-29 10:43:41 [scheduling-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 조회 완료 - meetingId: test-meeting-001, count: 20 +2025-10-29 10:43:41 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 오디오 청크 조회 완료 - meetingId: test-meeting-001, chunks: 20개 +2025-10-29 10:43:41 [scheduling-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 병합 완료 - chunks: 20, totalSize: 164720 +2025-10-29 10:43:41 [http-nio-8084-exec-4] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 100 +2025-10-29 10:43:41 [http-nio-8084-exec-4] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 100, size: 8236 bytes +2025-10-29 10:43:41 [http-nio-8084-exec-5] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 101 +2025-10-29 10:43:41 [http-nio-8084-exec-5] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 101, size: 8236 bytes +2025-10-29 10:43:42 [http-nio-8084-exec-6] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 102 +2025-10-29 10:43:42 [http-nio-8084-exec-6] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 102, size: 8236 bytes +2025-10-29 10:43:42 [http-nio-8084-exec-7] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 103 +2025-10-29 10:43:42 [http-nio-8084-exec-7] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 103, size: 8236 bytes +2025-10-29 10:43:42 [http-nio-8084-exec-8] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 104 +2025-10-29 10:43:42 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 104, size: 8236 bytes +2025-10-29 10:43:42 [http-nio-8084-exec-9] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 105 +2025-10-29 10:43:42 [http-nio-8084-exec-9] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 105, size: 8236 bytes +2025-10-29 10:43:43 [http-nio-8084-exec-10] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 106 +2025-10-29 10:43:43 [http-nio-8084-exec-10] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 106, size: 8236 bytes +2025-10-29 10:43:43 [http-nio-8084-exec-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 107 +2025-10-29 10:43:43 [http-nio-8084-exec-1] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 107, size: 8236 bytes +2025-10-29 10:43:43 [http-nio-8084-exec-2] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 108 +2025-10-29 10:43:43 [http-nio-8084-exec-2] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 108, size: 8236 bytes +2025-10-29 10:43:43 [http-nio-8084-exec-3] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 109 +2025-10-29 10:43:43 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 109, size: 8236 bytes +2025-10-29 10:43:44 [http-nio-8084-exec-4] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 110 +2025-10-29 10:43:44 [http-nio-8084-exec-4] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 110, size: 8236 bytes +2025-10-29 10:43:44 [http-nio-8084-exec-5] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 111 +2025-10-29 10:43:44 [http-nio-8084-exec-5] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 111, size: 8236 bytes +2025-10-29 10:43:44 [scheduling-1] DEBUG c.u.h.stt.service.AzureSpeechService - 음성 인식 실패 - NoMatch (무음 또는 인식 불가) +2025-10-29 10:43:44 [http-nio-8084-exec-6] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 112 +2025-10-29 10:43:44 [http-nio-8084-exec-6] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 112, size: 8236 bytes +2025-10-29 10:43:44 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - 음성 인식 결과 없음 - meetingId: test-meeting-001 +2025-10-29 10:43:44 [scheduling-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 삭제 완료 - meetingId: test-meeting-001 +2025-10-29 10:43:44 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:43:44 [http-nio-8084-exec-7] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 113 +2025-10-29 10:43:44 [http-nio-8084-exec-7] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 113, size: 8236 bytes +2025-10-29 10:43:45 [http-nio-8084-exec-8] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 114 +2025-10-29 10:43:45 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 114, size: 8236 bytes +2025-10-29 10:43:45 [http-nio-8084-exec-9] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 115 +2025-10-29 10:43:45 [http-nio-8084-exec-9] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 115, size: 8236 bytes +2025-10-29 10:43:45 [http-nio-8084-exec-10] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 116 +2025-10-29 10:43:45 [http-nio-8084-exec-10] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 116, size: 8236 bytes +2025-10-29 10:43:45 [http-nio-8084-exec-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 117 +2025-10-29 10:43:45 [http-nio-8084-exec-1] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 117, size: 8236 bytes +2025-10-29 10:43:46 [http-nio-8084-exec-2] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 118 +2025-10-29 10:43:46 [http-nio-8084-exec-2] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 118, size: 8236 bytes +2025-10-29 10:43:46 [http-nio-8084-exec-3] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 119 +2025-10-29 10:43:46 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 119, size: 8236 bytes +2025-10-29 10:43:46 [http-nio-8084-exec-4] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 120 +2025-10-29 10:43:46 [http-nio-8084-exec-4] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 120, size: 8236 bytes +2025-10-29 10:43:46 [http-nio-8084-exec-5] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 121 +2025-10-29 10:43:46 [http-nio-8084-exec-5] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 121, size: 8236 bytes +2025-10-29 10:43:47 [http-nio-8084-exec-6] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 122 +2025-10-29 10:43:47 [http-nio-8084-exec-6] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 122, size: 8236 bytes +2025-10-29 10:43:47 [http-nio-8084-exec-7] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 123 +2025-10-29 10:43:47 [http-nio-8084-exec-7] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 123, size: 8236 bytes +2025-10-29 10:43:47 [http-nio-8084-exec-8] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 124 +2025-10-29 10:43:47 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 124, size: 8236 bytes +2025-10-29 10:43:47 [http-nio-8084-exec-9] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 125 +2025-10-29 10:43:47 [http-nio-8084-exec-9] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 125, size: 8236 bytes +2025-10-29 10:43:48 [http-nio-8084-exec-10] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 126 +2025-10-29 10:43:48 [http-nio-8084-exec-10] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 126, size: 8236 bytes +2025-10-29 10:43:48 [http-nio-8084-exec-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 127 +2025-10-29 10:43:48 [http-nio-8084-exec-1] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 127, size: 8236 bytes +2025-10-29 10:43:48 [http-nio-8084-exec-2] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 128 +2025-10-29 10:43:48 [http-nio-8084-exec-2] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 128, size: 8236 bytes +2025-10-29 10:43:48 [http-nio-8084-exec-3] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 129 +2025-10-29 10:43:48 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 129, size: 8236 bytes +2025-10-29 10:43:49 [http-nio-8084-exec-4] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 130 +2025-10-29 10:43:49 [http-nio-8084-exec-4] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 130, size: 8236 bytes +2025-10-29 10:43:49 [http-nio-8084-exec-5] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 131 +2025-10-29 10:43:49 [http-nio-8084-exec-5] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 131, size: 8236 bytes +2025-10-29 10:43:49 [http-nio-8084-exec-6] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 132 +2025-10-29 10:43:49 [http-nio-8084-exec-6] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 132, size: 8236 bytes +2025-10-29 10:43:49 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:43:50 [scheduling-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 조회 완료 - meetingId: test-meeting-001, count: 19 +2025-10-29 10:43:50 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 오디오 청크 조회 완료 - meetingId: test-meeting-001, chunks: 19개 +2025-10-29 10:43:50 [scheduling-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 병합 완료 - chunks: 19, totalSize: 156484 +2025-10-29 10:43:50 [http-nio-8084-exec-7] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 133 +2025-10-29 10:43:50 [http-nio-8084-exec-7] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 133, size: 8236 bytes +2025-10-29 10:43:50 [http-nio-8084-exec-8] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 134 +2025-10-29 10:43:50 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 134, size: 8236 bytes +2025-10-29 10:43:50 [http-nio-8084-exec-9] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 135 +2025-10-29 10:43:50 [http-nio-8084-exec-9] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 135, size: 8236 bytes +2025-10-29 10:43:50 [http-nio-8084-exec-10] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 136 +2025-10-29 10:43:50 [http-nio-8084-exec-10] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 136, size: 8236 bytes +2025-10-29 10:43:51 [http-nio-8084-exec-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 137 +2025-10-29 10:43:51 [http-nio-8084-exec-1] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 137, size: 8236 bytes +2025-10-29 10:43:51 [http-nio-8084-exec-2] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 138 +2025-10-29 10:43:51 [http-nio-8084-exec-2] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 138, size: 8236 bytes +2025-10-29 10:43:51 [http-nio-8084-exec-3] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 139 +2025-10-29 10:43:51 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 139, size: 8236 bytes +2025-10-29 10:43:51 [http-nio-8084-exec-4] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 140 +2025-10-29 10:43:51 [http-nio-8084-exec-4] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 140, size: 8236 bytes +2025-10-29 10:43:52 [http-nio-8084-exec-5] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 141 +2025-10-29 10:43:52 [http-nio-8084-exec-5] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 141, size: 8236 bytes +2025-10-29 10:43:52 [http-nio-8084-exec-6] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 142 +2025-10-29 10:43:52 [http-nio-8084-exec-6] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 142, size: 8236 bytes +2025-10-29 10:43:52 [http-nio-8084-exec-7] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 143 +2025-10-29 10:43:52 [http-nio-8084-exec-7] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 143, size: 8236 bytes +2025-10-29 10:43:52 [http-nio-8084-exec-8] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 144 +2025-10-29 10:43:52 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 144, size: 8236 bytes +2025-10-29 10:43:52 [scheduling-1] DEBUG c.u.h.stt.service.AzureSpeechService - 음성 인식 실패 - NoMatch (무음 또는 인식 불가) +2025-10-29 10:43:53 [http-nio-8084-exec-9] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 145 +2025-10-29 10:43:53 [http-nio-8084-exec-9] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 145, size: 8236 bytes +2025-10-29 10:43:53 [http-nio-8084-exec-10] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 146 +2025-10-29 10:43:53 [http-nio-8084-exec-10] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 146, size: 8236 bytes +2025-10-29 10:43:53 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - 음성 인식 결과 없음 - meetingId: test-meeting-001 +2025-10-29 10:43:53 [scheduling-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 삭제 완료 - meetingId: test-meeting-001 +2025-10-29 10:43:53 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:43:53 [http-nio-8084-exec-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 147 +2025-10-29 10:43:53 [http-nio-8084-exec-1] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 147, size: 8236 bytes +2025-10-29 10:43:53 [http-nio-8084-exec-2] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 148 +2025-10-29 10:43:53 [http-nio-8084-exec-2] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 148, size: 8236 bytes +2025-10-29 10:43:54 [http-nio-8084-exec-3] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 149 +2025-10-29 10:43:54 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 149, size: 8236 bytes +2025-10-29 10:43:54 [http-nio-8084-exec-4] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 150 +2025-10-29 10:43:54 [http-nio-8084-exec-4] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 150, size: 8236 bytes +2025-10-29 10:43:54 [http-nio-8084-exec-5] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 151 +2025-10-29 10:43:54 [http-nio-8084-exec-5] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 151, size: 8236 bytes +2025-10-29 10:43:54 [http-nio-8084-exec-6] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 152 +2025-10-29 10:43:54 [http-nio-8084-exec-6] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 152, size: 8236 bytes +2025-10-29 10:43:55 [http-nio-8084-exec-7] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 153 +2025-10-29 10:43:55 [http-nio-8084-exec-7] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 153, size: 8236 bytes +2025-10-29 10:43:55 [http-nio-8084-exec-8] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 154 +2025-10-29 10:43:55 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 154, size: 8236 bytes +2025-10-29 10:43:55 [http-nio-8084-exec-9] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 155 +2025-10-29 10:43:55 [http-nio-8084-exec-9] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 155, size: 8236 bytes +2025-10-29 10:43:55 [http-nio-8084-exec-10] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 156 +2025-10-29 10:43:55 [http-nio-8084-exec-10] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 156, size: 8236 bytes +2025-10-29 10:43:56 [http-nio-8084-exec-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 157 +2025-10-29 10:43:56 [http-nio-8084-exec-1] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 157, size: 8236 bytes +2025-10-29 10:43:56 [http-nio-8084-exec-2] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 158 +2025-10-29 10:43:56 [http-nio-8084-exec-2] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 158, size: 8236 bytes +2025-10-29 10:43:56 [http-nio-8084-exec-3] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 159 +2025-10-29 10:43:56 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 159, size: 8236 bytes +2025-10-29 10:43:56 [http-nio-8084-exec-4] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 160 +2025-10-29 10:43:56 [http-nio-8084-exec-4] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 160, size: 8236 bytes +2025-10-29 10:43:57 [http-nio-8084-exec-5] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 161 +2025-10-29 10:43:57 [http-nio-8084-exec-5] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 161, size: 8236 bytes +2025-10-29 10:43:57 [http-nio-8084-exec-6] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 162 +2025-10-29 10:43:57 [http-nio-8084-exec-6] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 162, size: 8236 bytes +2025-10-29 10:43:57 [http-nio-8084-exec-7] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 163 +2025-10-29 10:43:57 [http-nio-8084-exec-7] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 163, size: 8236 bytes +2025-10-29 10:43:57 [http-nio-8084-exec-8] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 164 +2025-10-29 10:43:57 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 164, size: 8236 bytes +2025-10-29 10:43:58 [http-nio-8084-exec-9] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 165 +2025-10-29 10:43:58 [http-nio-8084-exec-9] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 165, size: 8236 bytes +2025-10-29 10:43:58 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:43:58 [scheduling-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 조회 완료 - meetingId: test-meeting-001, count: 19 +2025-10-29 10:43:58 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 오디오 청크 조회 완료 - meetingId: test-meeting-001, chunks: 19개 +2025-10-29 10:43:58 [scheduling-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 병합 완료 - chunks: 19, totalSize: 156484 +2025-10-29 10:43:58 [http-nio-8084-exec-10] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 166 +2025-10-29 10:43:58 [http-nio-8084-exec-10] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 166, size: 8236 bytes +2025-10-29 10:43:58 [http-nio-8084-exec-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 167 +2025-10-29 10:43:58 [http-nio-8084-exec-1] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 167, size: 8236 bytes +2025-10-29 10:43:58 [http-nio-8084-exec-2] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 168 +2025-10-29 10:43:58 [http-nio-8084-exec-2] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 168, size: 8236 bytes +2025-10-29 10:43:59 [http-nio-8084-exec-3] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 169 +2025-10-29 10:43:59 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 169, size: 8236 bytes +2025-10-29 10:43:59 [http-nio-8084-exec-4] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 170 +2025-10-29 10:43:59 [http-nio-8084-exec-4] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 170, size: 8236 bytes +2025-10-29 10:43:59 [http-nio-8084-exec-5] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 171 +2025-10-29 10:43:59 [http-nio-8084-exec-5] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 171, size: 8236 bytes +2025-10-29 10:43:59 [http-nio-8084-exec-6] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 172 +2025-10-29 10:43:59 [http-nio-8084-exec-6] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 172, size: 8236 bytes +2025-10-29 10:44:00 [http-nio-8084-exec-7] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 173 +2025-10-29 10:44:00 [http-nio-8084-exec-7] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 173, size: 8236 bytes +2025-10-29 10:44:00 [http-nio-8084-exec-8] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 174 +2025-10-29 10:44:00 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 174, size: 8236 bytes +2025-10-29 10:44:00 [http-nio-8084-exec-9] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 175 +2025-10-29 10:44:00 [http-nio-8084-exec-9] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 175, size: 8236 bytes +2025-10-29 10:44:01 [http-nio-8084-exec-10] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 176 +2025-10-29 10:44:01 [http-nio-8084-exec-10] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 176, size: 8236 bytes +2025-10-29 10:44:01 [http-nio-8084-exec-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 177 +2025-10-29 10:44:01 [http-nio-8084-exec-1] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 177, size: 8236 bytes +2025-10-29 10:44:01 [scheduling-1] DEBUG c.u.h.stt.service.AzureSpeechService - 음성 인식 실패 - NoMatch (무음 또는 인식 불가) +2025-10-29 10:44:01 [http-nio-8084-exec-2] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 178 +2025-10-29 10:44:01 [http-nio-8084-exec-2] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 178, size: 8236 bytes +2025-10-29 10:44:01 [http-nio-8084-exec-3] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 179 +2025-10-29 10:44:01 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 179, size: 8236 bytes +2025-10-29 10:44:01 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - 음성 인식 결과 없음 - meetingId: test-meeting-001 +2025-10-29 10:44:01 [scheduling-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 삭제 완료 - meetingId: test-meeting-001 +2025-10-29 10:44:01 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:44:02 [http-nio-8084-exec-4] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 180 +2025-10-29 10:44:02 [http-nio-8084-exec-4] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 180, size: 8236 bytes +2025-10-29 10:44:02 [http-nio-8084-exec-5] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 181 +2025-10-29 10:44:02 [http-nio-8084-exec-5] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 181, size: 8236 bytes +2025-10-29 10:44:02 [http-nio-8084-exec-6] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 182 +2025-10-29 10:44:02 [http-nio-8084-exec-6] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 182, size: 8236 bytes +2025-10-29 10:44:02 [http-nio-8084-exec-7] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 183 +2025-10-29 10:44:02 [http-nio-8084-exec-7] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 183, size: 8236 bytes +2025-10-29 10:44:03 [http-nio-8084-exec-8] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 184 +2025-10-29 10:44:03 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 184, size: 8236 bytes +2025-10-29 10:44:03 [http-nio-8084-exec-9] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 185 +2025-10-29 10:44:03 [http-nio-8084-exec-9] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 185, size: 8236 bytes +2025-10-29 10:44:03 [http-nio-8084-exec-10] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 186 +2025-10-29 10:44:03 [http-nio-8084-exec-10] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 186, size: 8236 bytes +2025-10-29 10:44:03 [http-nio-8084-exec-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 187 +2025-10-29 10:44:03 [http-nio-8084-exec-1] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 187, size: 8236 bytes +2025-10-29 10:44:04 [http-nio-8084-exec-2] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 188 +2025-10-29 10:44:04 [http-nio-8084-exec-2] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 188, size: 8236 bytes +2025-10-29 10:44:04 [http-nio-8084-exec-3] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 189 +2025-10-29 10:44:04 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 189, size: 8236 bytes +2025-10-29 10:44:04 [http-nio-8084-exec-4] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 190 +2025-10-29 10:44:04 [http-nio-8084-exec-4] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 190, size: 8236 bytes +2025-10-29 10:44:04 [http-nio-8084-exec-5] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 191 +2025-10-29 10:44:04 [http-nio-8084-exec-5] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 191, size: 8236 bytes +2025-10-29 10:44:05 [http-nio-8084-exec-6] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 192 +2025-10-29 10:44:05 [http-nio-8084-exec-6] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 192, size: 8236 bytes +2025-10-29 10:44:05 [http-nio-8084-exec-7] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 193 +2025-10-29 10:44:05 [http-nio-8084-exec-7] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 193, size: 8236 bytes +2025-10-29 10:44:05 [http-nio-8084-exec-8] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 194 +2025-10-29 10:44:05 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 194, size: 8236 bytes +2025-10-29 10:44:05 [http-nio-8084-exec-9] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 195 +2025-10-29 10:44:05 [http-nio-8084-exec-9] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 195, size: 8236 bytes +2025-10-29 10:44:06 [http-nio-8084-exec-10] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 196 +2025-10-29 10:44:06 [http-nio-8084-exec-10] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 196, size: 8236 bytes +2025-10-29 10:44:06 [http-nio-8084-exec-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 197 +2025-10-29 10:44:06 [http-nio-8084-exec-1] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 197, size: 8236 bytes +2025-10-29 10:44:06 [http-nio-8084-exec-2] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 198 +2025-10-29 10:44:06 [http-nio-8084-exec-2] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 198, size: 8236 bytes +2025-10-29 10:44:06 [http-nio-8084-exec-3] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 199 +2025-10-29 10:44:06 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 199, size: 8236 bytes +2025-10-29 10:44:06 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:44:06 [scheduling-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 조회 완료 - meetingId: test-meeting-001, count: 20 +2025-10-29 10:44:06 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 오디오 청크 조회 완료 - meetingId: test-meeting-001, chunks: 20개 +2025-10-29 10:44:06 [scheduling-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 병합 완료 - chunks: 20, totalSize: 164720 +2025-10-29 10:44:07 [http-nio-8084-exec-4] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 200 +2025-10-29 10:44:07 [http-nio-8084-exec-4] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 200, size: 8236 bytes +2025-10-29 10:44:07 [http-nio-8084-exec-5] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 201 +2025-10-29 10:44:07 [http-nio-8084-exec-5] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 201, size: 8236 bytes +2025-10-29 10:44:07 [http-nio-8084-exec-6] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 202 +2025-10-29 10:44:07 [http-nio-8084-exec-6] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 202, size: 8236 bytes +2025-10-29 10:44:07 [http-nio-8084-exec-7] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 203 +2025-10-29 10:44:07 [http-nio-8084-exec-7] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 203, size: 8236 bytes +2025-10-29 10:44:08 [http-nio-8084-exec-8] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 204 +2025-10-29 10:44:08 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 204, size: 8236 bytes +2025-10-29 10:44:08 [http-nio-8084-exec-9] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 205 +2025-10-29 10:44:08 [http-nio-8084-exec-9] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 205, size: 8236 bytes +2025-10-29 10:44:08 [http-nio-8084-exec-10] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 206 +2025-10-29 10:44:08 [http-nio-8084-exec-10] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 206, size: 8236 bytes +2025-10-29 10:44:09 [http-nio-8084-exec-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 207 +2025-10-29 10:44:09 [http-nio-8084-exec-1] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 207, size: 8236 bytes +2025-10-29 10:44:09 [http-nio-8084-exec-2] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 208 +2025-10-29 10:44:09 [http-nio-8084-exec-2] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 208, size: 8236 bytes +2025-10-29 10:44:09 [http-nio-8084-exec-3] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 209 +2025-10-29 10:44:09 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 209, size: 8236 bytes +2025-10-29 10:44:09 [http-nio-8084-exec-4] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 210 +2025-10-29 10:44:09 [http-nio-8084-exec-4] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 210, size: 8236 bytes +2025-10-29 10:44:09 [http-nio-8084-exec-5] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 211 +2025-10-29 10:44:09 [http-nio-8084-exec-5] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 211, size: 8236 bytes +2025-10-29 10:44:10 [scheduling-1] DEBUG c.u.h.stt.service.AzureSpeechService - 음성 인식 실패 - NoMatch (무음 또는 인식 불가) +2025-10-29 10:44:10 [http-nio-8084-exec-6] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 212 +2025-10-29 10:44:10 [http-nio-8084-exec-6] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 212, size: 8236 bytes +2025-10-29 10:44:10 [http-nio-8084-exec-7] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 213 +2025-10-29 10:44:10 [http-nio-8084-exec-7] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 213, size: 8236 bytes +2025-10-29 10:44:10 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - 음성 인식 결과 없음 - meetingId: test-meeting-001 +2025-10-29 10:44:10 [scheduling-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 삭제 완료 - meetingId: test-meeting-001 +2025-10-29 10:44:10 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:44:10 [http-nio-8084-exec-8] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 214 +2025-10-29 10:44:10 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 214, size: 8236 bytes +2025-10-29 10:44:11 [http-nio-8084-exec-9] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 215 +2025-10-29 10:44:11 [http-nio-8084-exec-9] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 215, size: 8236 bytes +2025-10-29 10:44:11 [http-nio-8084-exec-10] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 216 +2025-10-29 10:44:11 [http-nio-8084-exec-10] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 216, size: 8236 bytes +2025-10-29 10:44:11 [http-nio-8084-exec-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 217 +2025-10-29 10:44:11 [http-nio-8084-exec-1] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 217, size: 8236 bytes +2025-10-29 10:44:11 [http-nio-8084-exec-2] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 218 +2025-10-29 10:44:11 [http-nio-8084-exec-2] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 218, size: 8236 bytes +2025-10-29 10:44:12 [http-nio-8084-exec-3] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 219 +2025-10-29 10:44:12 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 219, size: 8236 bytes +2025-10-29 10:44:12 [http-nio-8084-exec-4] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 220 +2025-10-29 10:44:12 [http-nio-8084-exec-4] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 220, size: 8236 bytes +2025-10-29 10:44:12 [http-nio-8084-exec-5] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 221 +2025-10-29 10:44:12 [http-nio-8084-exec-5] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 221, size: 8236 bytes +2025-10-29 10:44:12 [http-nio-8084-exec-6] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 222 +2025-10-29 10:44:12 [http-nio-8084-exec-6] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 222, size: 8236 bytes +2025-10-29 10:44:13 [http-nio-8084-exec-7] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 223 +2025-10-29 10:44:13 [http-nio-8084-exec-7] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 223, size: 8236 bytes +2025-10-29 10:44:13 [http-nio-8084-exec-8] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 224 +2025-10-29 10:44:13 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 224, size: 8236 bytes +2025-10-29 10:44:13 [http-nio-8084-exec-9] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 225 +2025-10-29 10:44:13 [http-nio-8084-exec-9] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 225, size: 8236 bytes +2025-10-29 10:44:13 [http-nio-8084-exec-10] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 226 +2025-10-29 10:44:13 [http-nio-8084-exec-10] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 226, size: 8236 bytes +2025-10-29 10:44:14 [http-nio-8084-exec-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 227 +2025-10-29 10:44:14 [http-nio-8084-exec-1] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 227, size: 8236 bytes +2025-10-29 10:44:14 [http-nio-8084-exec-2] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 228 +2025-10-29 10:44:14 [http-nio-8084-exec-2] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 228, size: 8236 bytes +2025-10-29 10:44:14 [http-nio-8084-exec-3] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 229 +2025-10-29 10:44:14 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 229, size: 8236 bytes +2025-10-29 10:44:14 [http-nio-8084-exec-4] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 230 +2025-10-29 10:44:14 [http-nio-8084-exec-4] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 230, size: 8236 bytes +2025-10-29 10:44:15 [http-nio-8084-exec-5] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 231 +2025-10-29 10:44:15 [http-nio-8084-exec-5] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 231, size: 8236 bytes +2025-10-29 10:44:15 [http-nio-8084-exec-6] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 232 +2025-10-29 10:44:15 [http-nio-8084-exec-6] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 232, size: 8236 bytes +2025-10-29 10:44:15 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:44:15 [http-nio-8084-exec-7] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 233 +2025-10-29 10:44:15 [http-nio-8084-exec-7] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 233, size: 8236 bytes +2025-10-29 10:44:15 [scheduling-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 조회 완료 - meetingId: test-meeting-001, count: 20 +2025-10-29 10:44:15 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 오디오 청크 조회 완료 - meetingId: test-meeting-001, chunks: 20개 +2025-10-29 10:44:15 [scheduling-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 병합 완료 - chunks: 20, totalSize: 164720 +2025-10-29 10:44:15 [http-nio-8084-exec-8] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 234 +2025-10-29 10:44:15 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 234, size: 8236 bytes +2025-10-29 10:44:16 [http-nio-8084-exec-9] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 235 +2025-10-29 10:44:16 [http-nio-8084-exec-9] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 235, size: 8236 bytes +2025-10-29 10:44:16 [http-nio-8084-exec-10] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 236 +2025-10-29 10:44:16 [http-nio-8084-exec-10] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 236, size: 8236 bytes +2025-10-29 10:44:16 [http-nio-8084-exec-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 237 +2025-10-29 10:44:16 [http-nio-8084-exec-1] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 237, size: 8236 bytes +2025-10-29 10:44:16 [http-nio-8084-exec-2] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 238 +2025-10-29 10:44:16 [http-nio-8084-exec-2] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 238, size: 8236 bytes +2025-10-29 10:44:17 [http-nio-8084-exec-3] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 239 +2025-10-29 10:44:17 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 239, size: 8236 bytes +2025-10-29 10:44:17 [http-nio-8084-exec-4] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 240 +2025-10-29 10:44:17 [http-nio-8084-exec-4] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 240, size: 8236 bytes +2025-10-29 10:44:17 [http-nio-8084-exec-5] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 241 +2025-10-29 10:44:17 [http-nio-8084-exec-5] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 241, size: 8236 bytes +2025-10-29 10:44:17 [http-nio-8084-exec-6] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 242 +2025-10-29 10:44:17 [http-nio-8084-exec-6] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 242, size: 8236 bytes +2025-10-29 10:44:18 [http-nio-8084-exec-7] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 243 +2025-10-29 10:44:18 [http-nio-8084-exec-7] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 243, size: 8236 bytes +2025-10-29 10:44:18 [scheduling-1] DEBUG c.u.h.stt.service.AzureSpeechService - 음성 인식 실패 - NoMatch (무음 또는 인식 불가) +2025-10-29 10:44:18 [http-nio-8084-exec-8] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 244 +2025-10-29 10:44:18 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 244, size: 8236 bytes +2025-10-29 10:44:18 [http-nio-8084-exec-9] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 245 +2025-10-29 10:44:18 [http-nio-8084-exec-9] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 245, size: 8236 bytes +2025-10-29 10:44:18 [http-nio-8084-exec-10] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 246 +2025-10-29 10:44:18 [http-nio-8084-exec-10] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 246, size: 8236 bytes +2025-10-29 10:44:19 [http-nio-8084-exec-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 247 +2025-10-29 10:44:19 [http-nio-8084-exec-1] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 247, size: 8236 bytes +2025-10-29 10:44:19 [http-nio-8084-exec-2] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 248 +2025-10-29 10:44:19 [http-nio-8084-exec-2] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 248, size: 8236 bytes +2025-10-29 10:44:19 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - 음성 인식 결과 없음 - meetingId: test-meeting-001 +2025-10-29 10:44:19 [scheduling-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 삭제 완료 - meetingId: test-meeting-001 +2025-10-29 10:44:19 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:44:19 [http-nio-8084-exec-3] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 249 +2025-10-29 10:44:19 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 249, size: 8236 bytes +2025-10-29 10:44:19 [http-nio-8084-exec-4] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 250 +2025-10-29 10:44:19 [http-nio-8084-exec-4] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 250, size: 8236 bytes +2025-10-29 10:44:20 [http-nio-8084-exec-5] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 251 +2025-10-29 10:44:20 [http-nio-8084-exec-5] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 251, size: 8236 bytes +2025-10-29 10:44:20 [http-nio-8084-exec-6] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 252 +2025-10-29 10:44:20 [http-nio-8084-exec-6] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 252, size: 8236 bytes +2025-10-29 10:44:20 [http-nio-8084-exec-7] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 253 +2025-10-29 10:44:20 [http-nio-8084-exec-7] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 253, size: 8236 bytes +2025-10-29 10:44:20 [http-nio-8084-exec-8] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 254 +2025-10-29 10:44:20 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 254, size: 8236 bytes +2025-10-29 10:44:21 [http-nio-8084-exec-9] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 255 +2025-10-29 10:44:21 [http-nio-8084-exec-9] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 255, size: 8236 bytes +2025-10-29 10:44:21 [http-nio-8084-exec-10] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 256 +2025-10-29 10:44:21 [http-nio-8084-exec-10] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 256, size: 8236 bytes +2025-10-29 10:44:21 [http-nio-8084-exec-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 257 +2025-10-29 10:44:21 [http-nio-8084-exec-1] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 257, size: 8236 bytes +2025-10-29 10:44:22 [http-nio-8084-exec-2] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 258 +2025-10-29 10:44:22 [http-nio-8084-exec-2] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 258, size: 8236 bytes +2025-10-29 10:44:22 [http-nio-8084-exec-3] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 259 +2025-10-29 10:44:22 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 259, size: 8236 bytes +2025-10-29 10:44:22 [http-nio-8084-exec-4] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 260 +2025-10-29 10:44:22 [http-nio-8084-exec-4] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 260, size: 8236 bytes +2025-10-29 10:44:22 [http-nio-8084-exec-5] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 261 +2025-10-29 10:44:22 [http-nio-8084-exec-5] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 261, size: 8236 bytes +2025-10-29 10:44:23 [http-nio-8084-exec-6] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 262 +2025-10-29 10:44:23 [http-nio-8084-exec-6] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 262, size: 8236 bytes +2025-10-29 10:44:23 [http-nio-8084-exec-7] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 263 +2025-10-29 10:44:23 [http-nio-8084-exec-7] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 263, size: 8236 bytes +2025-10-29 10:44:23 [http-nio-8084-exec-8] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 264 +2025-10-29 10:44:23 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 264, size: 8236 bytes +2025-10-29 10:44:23 [http-nio-8084-exec-9] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 265 +2025-10-29 10:44:23 [http-nio-8084-exec-9] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 265, size: 8236 bytes +2025-10-29 10:44:24 [http-nio-8084-exec-10] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 266 +2025-10-29 10:44:24 [http-nio-8084-exec-10] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 266, size: 8236 bytes +2025-10-29 10:44:24 [http-nio-8084-exec-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 267 +2025-10-29 10:44:24 [http-nio-8084-exec-1] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 267, size: 8236 bytes +2025-10-29 10:44:24 [http-nio-8084-exec-2] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 268 +2025-10-29 10:44:24 [http-nio-8084-exec-2] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 268, size: 8236 bytes +2025-10-29 10:44:24 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:44:24 [scheduling-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 조회 완료 - meetingId: test-meeting-001, count: 20 +2025-10-29 10:44:24 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 오디오 청크 조회 완료 - meetingId: test-meeting-001, chunks: 20개 +2025-10-29 10:44:24 [scheduling-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 병합 완료 - chunks: 20, totalSize: 164720 +2025-10-29 10:44:24 [http-nio-8084-exec-3] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 269 +2025-10-29 10:44:24 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 269, size: 8236 bytes +2025-10-29 10:44:25 [http-nio-8084-exec-4] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 270 +2025-10-29 10:44:25 [http-nio-8084-exec-4] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 270, size: 8236 bytes +2025-10-29 10:44:25 [http-nio-8084-exec-5] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 271 +2025-10-29 10:44:25 [http-nio-8084-exec-5] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 271, size: 8236 bytes +2025-10-29 10:44:25 [http-nio-8084-exec-6] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 272 +2025-10-29 10:44:25 [http-nio-8084-exec-6] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 272, size: 8236 bytes +2025-10-29 10:44:25 [http-nio-8084-exec-7] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 273 +2025-10-29 10:44:25 [http-nio-8084-exec-7] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 273, size: 8236 bytes +2025-10-29 10:44:26 [http-nio-8084-exec-8] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 274 +2025-10-29 10:44:26 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 274, size: 8236 bytes +2025-10-29 10:44:26 [http-nio-8084-exec-9] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 275 +2025-10-29 10:44:26 [http-nio-8084-exec-9] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 275, size: 8236 bytes +2025-10-29 10:44:26 [http-nio-8084-exec-10] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 276 +2025-10-29 10:44:26 [http-nio-8084-exec-10] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 276, size: 8236 bytes +2025-10-29 10:44:26 [http-nio-8084-exec-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 277 +2025-10-29 10:44:26 [http-nio-8084-exec-1] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 277, size: 8236 bytes +2025-10-29 10:44:27 [scheduling-1] DEBUG c.u.h.stt.service.AzureSpeechService - 음성 인식 실패 - NoMatch (무음 또는 인식 불가) +2025-10-29 10:44:27 [http-nio-8084-exec-2] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 278 +2025-10-29 10:44:27 [http-nio-8084-exec-2] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 278, size: 8236 bytes +2025-10-29 10:44:27 [http-nio-8084-exec-3] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 279 +2025-10-29 10:44:27 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 279, size: 8236 bytes +2025-10-29 10:44:27 [http-nio-8084-exec-4] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 280 +2025-10-29 10:44:27 [http-nio-8084-exec-4] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 280, size: 8236 bytes +2025-10-29 10:44:27 [http-nio-8084-exec-5] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 281 +2025-10-29 10:44:27 [http-nio-8084-exec-5] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 281, size: 8236 bytes +2025-10-29 10:44:28 [http-nio-8084-exec-6] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 282 +2025-10-29 10:44:28 [http-nio-8084-exec-6] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 282, size: 8236 bytes +2025-10-29 10:44:28 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - 음성 인식 결과 없음 - meetingId: test-meeting-001 +2025-10-29 10:44:28 [scheduling-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 삭제 완료 - meetingId: test-meeting-001 +2025-10-29 10:44:28 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:44:28 [http-nio-8084-exec-7] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 283 +2025-10-29 10:44:28 [http-nio-8084-exec-7] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 283, size: 8236 bytes +2025-10-29 10:44:28 [http-nio-8084-exec-8] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 284 +2025-10-29 10:44:28 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 284, size: 8236 bytes +2025-10-29 10:44:28 [http-nio-8084-exec-9] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 285 +2025-10-29 10:44:28 [http-nio-8084-exec-9] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 285, size: 8236 bytes +2025-10-29 10:44:29 [http-nio-8084-exec-10] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 286 +2025-10-29 10:44:29 [http-nio-8084-exec-10] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 286, size: 8236 bytes +2025-10-29 10:44:29 [http-nio-8084-exec-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 287 +2025-10-29 10:44:29 [http-nio-8084-exec-1] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 287, size: 8236 bytes +2025-10-29 10:44:29 [http-nio-8084-exec-2] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 288 +2025-10-29 10:44:29 [http-nio-8084-exec-2] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 288, size: 8236 bytes +2025-10-29 10:44:29 [http-nio-8084-exec-3] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 289 +2025-10-29 10:44:29 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 289, size: 8236 bytes +2025-10-29 10:44:30 [http-nio-8084-exec-4] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 290 +2025-10-29 10:44:30 [http-nio-8084-exec-4] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 290, size: 8236 bytes +2025-10-29 10:44:30 [http-nio-8084-exec-5] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 291 +2025-10-29 10:44:30 [http-nio-8084-exec-5] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 291, size: 8236 bytes +2025-10-29 10:44:30 [http-nio-8084-exec-6] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 292 +2025-10-29 10:44:30 [http-nio-8084-exec-6] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 292, size: 8236 bytes +2025-10-29 10:44:30 [http-nio-8084-exec-7] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 293 +2025-10-29 10:44:30 [http-nio-8084-exec-7] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 293, size: 8236 bytes +2025-10-29 10:44:31 [http-nio-8084-exec-8] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 294 +2025-10-29 10:44:31 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 294, size: 8236 bytes +2025-10-29 10:44:31 [http-nio-8084-exec-9] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 295 +2025-10-29 10:44:31 [http-nio-8084-exec-9] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 295, size: 8236 bytes +2025-10-29 10:44:31 [http-nio-8084-exec-10] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 296 +2025-10-29 10:44:31 [http-nio-8084-exec-10] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 296, size: 8236 bytes +2025-10-29 10:44:31 [http-nio-8084-exec-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 297 +2025-10-29 10:44:31 [http-nio-8084-exec-1] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 297, size: 8236 bytes +2025-10-29 10:44:32 [http-nio-8084-exec-2] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 298 +2025-10-29 10:44:32 [http-nio-8084-exec-2] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 298, size: 8236 bytes +2025-10-29 10:44:32 [http-nio-8084-exec-3] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 299 +2025-10-29 10:44:32 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 299, size: 8236 bytes +2025-10-29 10:44:32 [http-nio-8084-exec-4] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 300 +2025-10-29 10:44:32 [http-nio-8084-exec-4] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 300, size: 8236 bytes +2025-10-29 10:44:33 [http-nio-8084-exec-5] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 301 +2025-10-29 10:44:33 [http-nio-8084-exec-5] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 301, size: 8236 bytes +2025-10-29 10:44:33 [http-nio-8084-exec-6] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 302 +2025-10-29 10:44:33 [http-nio-8084-exec-6] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 302, size: 8236 bytes +2025-10-29 10:44:33 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:44:33 [scheduling-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 조회 완료 - meetingId: test-meeting-001, count: 20 +2025-10-29 10:44:33 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 오디오 청크 조회 완료 - meetingId: test-meeting-001, chunks: 20개 +2025-10-29 10:44:33 [scheduling-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 병합 완료 - chunks: 20, totalSize: 164720 +2025-10-29 10:44:33 [http-nio-8084-exec-7] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 303 +2025-10-29 10:44:33 [http-nio-8084-exec-7] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 303, size: 8236 bytes +2025-10-29 10:44:33 [http-nio-8084-exec-8] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 304 +2025-10-29 10:44:33 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 304, size: 8236 bytes +2025-10-29 10:44:34 [http-nio-8084-exec-9] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 305 +2025-10-29 10:44:34 [http-nio-8084-exec-9] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 305, size: 8236 bytes +2025-10-29 10:44:34 [http-nio-8084-exec-10] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 306 +2025-10-29 10:44:34 [http-nio-8084-exec-10] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 306, size: 8236 bytes +2025-10-29 10:44:34 [http-nio-8084-exec-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 307 +2025-10-29 10:44:34 [http-nio-8084-exec-1] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 307, size: 8236 bytes +2025-10-29 10:44:34 [http-nio-8084-exec-2] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 308 +2025-10-29 10:44:34 [http-nio-8084-exec-2] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 308, size: 8236 bytes +2025-10-29 10:44:35 [http-nio-8084-exec-3] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 309 +2025-10-29 10:44:35 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 309, size: 8236 bytes +2025-10-29 10:44:35 [http-nio-8084-exec-4] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 310 +2025-10-29 10:44:35 [http-nio-8084-exec-4] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 310, size: 8236 bytes +2025-10-29 10:44:35 [http-nio-8084-exec-5] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 311 +2025-10-29 10:44:35 [http-nio-8084-exec-5] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 311, size: 8236 bytes +2025-10-29 10:44:35 [http-nio-8084-exec-6] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 312 +2025-10-29 10:44:35 [http-nio-8084-exec-6] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 312, size: 8236 bytes +2025-10-29 10:44:36 [http-nio-8084-exec-7] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 313 +2025-10-29 10:44:36 [http-nio-8084-exec-7] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 313, size: 8236 bytes +2025-10-29 10:44:36 [http-nio-8084-exec-8] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 314 +2025-10-29 10:44:36 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 314, size: 8236 bytes +2025-10-29 10:44:36 [scheduling-1] DEBUG c.u.h.stt.service.AzureSpeechService - 음성 인식 실패 - NoMatch (무음 또는 인식 불가) +2025-10-29 10:44:36 [http-nio-8084-exec-9] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 315 +2025-10-29 10:44:36 [http-nio-8084-exec-9] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 315, size: 8236 bytes +2025-10-29 10:44:36 [http-nio-8084-exec-10] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 316 +2025-10-29 10:44:36 [http-nio-8084-exec-10] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 316, size: 8236 bytes +2025-10-29 10:44:36 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - 음성 인식 결과 없음 - meetingId: test-meeting-001 +2025-10-29 10:44:36 [scheduling-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 삭제 완료 - meetingId: test-meeting-001 +2025-10-29 10:44:36 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:44:37 [http-nio-8084-exec-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 317 +2025-10-29 10:44:37 [http-nio-8084-exec-1] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 317, size: 8236 bytes +2025-10-29 10:44:37 [http-nio-8084-exec-2] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 318 +2025-10-29 10:44:37 [http-nio-8084-exec-2] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 318, size: 8236 bytes +2025-10-29 10:44:37 [http-nio-8084-exec-3] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 319 +2025-10-29 10:44:37 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 319, size: 8236 bytes +2025-10-29 10:44:37 [http-nio-8084-exec-4] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 320 +2025-10-29 10:44:37 [http-nio-8084-exec-4] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 320, size: 8236 bytes +2025-10-29 10:44:38 [http-nio-8084-exec-5] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 321 +2025-10-29 10:44:38 [http-nio-8084-exec-5] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 321, size: 8236 bytes +2025-10-29 10:44:38 [http-nio-8084-exec-6] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 322 +2025-10-29 10:44:38 [http-nio-8084-exec-6] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 322, size: 8236 bytes +2025-10-29 10:44:38 [http-nio-8084-exec-7] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 323 +2025-10-29 10:44:38 [http-nio-8084-exec-7] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 323, size: 8236 bytes +2025-10-29 10:44:38 [http-nio-8084-exec-8] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 324 +2025-10-29 10:44:38 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 324, size: 8236 bytes +2025-10-29 10:44:39 [http-nio-8084-exec-9] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 325 +2025-10-29 10:44:39 [http-nio-8084-exec-9] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 325, size: 8236 bytes +2025-10-29 10:44:39 [http-nio-8084-exec-10] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 326 +2025-10-29 10:44:39 [http-nio-8084-exec-10] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 326, size: 8236 bytes +2025-10-29 10:44:39 [http-nio-8084-exec-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 327 +2025-10-29 10:44:39 [http-nio-8084-exec-1] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 327, size: 8236 bytes +2025-10-29 10:44:39 [http-nio-8084-exec-2] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 328 +2025-10-29 10:44:39 [http-nio-8084-exec-2] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 328, size: 8236 bytes +2025-10-29 10:44:40 [http-nio-8084-exec-3] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 329 +2025-10-29 10:44:40 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 329, size: 8236 bytes +2025-10-29 10:44:40 [http-nio-8084-exec-4] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 330 +2025-10-29 10:44:40 [http-nio-8084-exec-4] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 330, size: 8236 bytes +2025-10-29 10:44:40 [http-nio-8084-exec-5] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 331 +2025-10-29 10:44:40 [http-nio-8084-exec-5] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 331, size: 8236 bytes +2025-10-29 10:44:40 [http-nio-8084-exec-6] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 332 +2025-10-29 10:44:40 [http-nio-8084-exec-6] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 332, size: 8236 bytes +2025-10-29 10:44:41 [http-nio-8084-exec-7] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 333 +2025-10-29 10:44:41 [http-nio-8084-exec-7] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 333, size: 8236 bytes +2025-10-29 10:44:41 [http-nio-8084-exec-8] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 334 +2025-10-29 10:44:41 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 334, size: 8236 bytes +2025-10-29 10:44:41 [http-nio-8084-exec-9] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 335 +2025-10-29 10:44:41 [http-nio-8084-exec-9] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 335, size: 8236 bytes +2025-10-29 10:44:41 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:44:41 [scheduling-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 조회 완료 - meetingId: test-meeting-001, count: 19 +2025-10-29 10:44:41 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 오디오 청크 조회 완료 - meetingId: test-meeting-001, chunks: 19개 +2025-10-29 10:44:41 [scheduling-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 병합 완료 - chunks: 19, totalSize: 156484 +2025-10-29 10:44:41 [http-nio-8084-exec-10] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 336 +2025-10-29 10:44:41 [http-nio-8084-exec-10] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 336, size: 8236 bytes +2025-10-29 10:44:42 [http-nio-8084-exec-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 337 +2025-10-29 10:44:42 [http-nio-8084-exec-1] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 337, size: 8236 bytes +2025-10-29 10:44:42 [http-nio-8084-exec-2] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 338 +2025-10-29 10:44:42 [http-nio-8084-exec-2] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 338, size: 8236 bytes +2025-10-29 10:44:42 [http-nio-8084-exec-3] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 339 +2025-10-29 10:44:42 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 339, size: 8236 bytes +2025-10-29 10:44:43 [http-nio-8084-exec-4] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 340 +2025-10-29 10:44:43 [http-nio-8084-exec-4] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 340, size: 8236 bytes +2025-10-29 10:44:43 [http-nio-8084-exec-5] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 341 +2025-10-29 10:44:43 [http-nio-8084-exec-5] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 341, size: 8236 bytes +2025-10-29 10:44:43 [http-nio-8084-exec-6] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 342 +2025-10-29 10:44:43 [http-nio-8084-exec-6] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 342, size: 8236 bytes +2025-10-29 10:44:43 [http-nio-8084-exec-7] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 343 +2025-10-29 10:44:43 [http-nio-8084-exec-7] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 343, size: 8236 bytes +2025-10-29 10:44:44 [http-nio-8084-exec-8] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 344 +2025-10-29 10:44:44 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 344, size: 8236 bytes +2025-10-29 10:44:44 [http-nio-8084-exec-9] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 345 +2025-10-29 10:44:44 [http-nio-8084-exec-9] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 345, size: 8236 bytes +2025-10-29 10:44:44 [http-nio-8084-exec-10] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 346 +2025-10-29 10:44:44 [http-nio-8084-exec-10] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 346, size: 8236 bytes +2025-10-29 10:44:44 [scheduling-1] DEBUG c.u.h.stt.service.AzureSpeechService - 음성 인식 실패 - NoMatch (무음 또는 인식 불가) +2025-10-29 10:44:44 [http-nio-8084-exec-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 347 +2025-10-29 10:44:44 [http-nio-8084-exec-1] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 347, size: 8236 bytes +2025-10-29 10:44:45 [http-nio-8084-exec-2] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 348 +2025-10-29 10:44:45 [http-nio-8084-exec-2] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 348, size: 8236 bytes +2025-10-29 10:44:45 [http-nio-8084-exec-3] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 349 +2025-10-29 10:44:45 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 349, size: 8236 bytes +2025-10-29 10:44:45 [http-nio-8084-exec-4] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 350 +2025-10-29 10:44:45 [http-nio-8084-exec-4] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 350, size: 8236 bytes +2025-10-29 10:44:45 [http-nio-8084-exec-5] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 351 +2025-10-29 10:44:45 [http-nio-8084-exec-5] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 351, size: 8236 bytes +2025-10-29 10:44:45 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - 음성 인식 결과 없음 - meetingId: test-meeting-001 +2025-10-29 10:44:45 [scheduling-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 삭제 완료 - meetingId: test-meeting-001 +2025-10-29 10:44:45 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:44:46 [http-nio-8084-exec-6] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 352 +2025-10-29 10:44:46 [http-nio-8084-exec-6] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 352, size: 8236 bytes +2025-10-29 10:44:46 [http-nio-8084-exec-7] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 353 +2025-10-29 10:44:46 [http-nio-8084-exec-7] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 353, size: 8236 bytes +2025-10-29 10:44:46 [http-nio-8084-exec-8] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 354 +2025-10-29 10:44:46 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 354, size: 8236 bytes +2025-10-29 10:44:46 [http-nio-8084-exec-9] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 355 +2025-10-29 10:44:46 [http-nio-8084-exec-9] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 355, size: 8236 bytes +2025-10-29 10:44:47 [http-nio-8084-exec-10] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 356 +2025-10-29 10:44:47 [http-nio-8084-exec-10] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 356, size: 8236 bytes +2025-10-29 10:44:47 [http-nio-8084-exec-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 357 +2025-10-29 10:44:47 [http-nio-8084-exec-1] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 357, size: 8236 bytes +2025-10-29 10:44:47 [http-nio-8084-exec-2] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 358 +2025-10-29 10:44:47 [http-nio-8084-exec-2] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 358, size: 8236 bytes +2025-10-29 10:44:47 [http-nio-8084-exec-3] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 359 +2025-10-29 10:44:47 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 359, size: 8236 bytes +2025-10-29 10:44:48 [http-nio-8084-exec-4] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 360 +2025-10-29 10:44:48 [http-nio-8084-exec-4] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 360, size: 8236 bytes +2025-10-29 10:44:48 [http-nio-8084-exec-5] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 361 +2025-10-29 10:44:48 [http-nio-8084-exec-5] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 361, size: 8236 bytes +2025-10-29 10:44:48 [http-nio-8084-exec-6] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 362 +2025-10-29 10:44:48 [http-nio-8084-exec-6] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 362, size: 8236 bytes +2025-10-29 10:44:48 [http-nio-8084-exec-7] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 363 +2025-10-29 10:44:48 [http-nio-8084-exec-7] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 363, size: 8236 bytes +2025-10-29 10:44:49 [http-nio-8084-exec-8] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 364 +2025-10-29 10:44:49 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 364, size: 8236 bytes +2025-10-29 10:44:49 [http-nio-8084-exec-9] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 365 +2025-10-29 10:44:49 [http-nio-8084-exec-9] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 365, size: 8236 bytes +2025-10-29 10:44:49 [http-nio-8084-exec-10] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 366 +2025-10-29 10:44:49 [http-nio-8084-exec-10] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 366, size: 8236 bytes +2025-10-29 10:44:49 [http-nio-8084-exec-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 367 +2025-10-29 10:44:49 [http-nio-8084-exec-1] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 367, size: 8236 bytes +2025-10-29 10:44:50 [http-nio-8084-exec-2] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 368 +2025-10-29 10:44:50 [http-nio-8084-exec-2] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 368, size: 8236 bytes +2025-10-29 10:44:50 [http-nio-8084-exec-3] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 369 +2025-10-29 10:44:50 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 369, size: 8236 bytes +2025-10-29 10:44:50 [http-nio-8084-exec-4] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 370 +2025-10-29 10:44:50 [http-nio-8084-exec-4] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 370, size: 8236 bytes +2025-10-29 10:44:50 [http-nio-8084-exec-5] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 371 +2025-10-29 10:44:50 [http-nio-8084-exec-5] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 371, size: 8236 bytes +2025-10-29 10:44:50 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:44:50 [scheduling-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 조회 완료 - meetingId: test-meeting-001, count: 20 +2025-10-29 10:44:50 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 오디오 청크 조회 완료 - meetingId: test-meeting-001, chunks: 20개 +2025-10-29 10:44:50 [scheduling-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 병합 완료 - chunks: 20, totalSize: 164720 +2025-10-29 10:44:51 [http-nio-8084-exec-6] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 372 +2025-10-29 10:44:51 [http-nio-8084-exec-6] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 372, size: 8236 bytes +2025-10-29 10:44:51 [http-nio-8084-exec-7] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 373 +2025-10-29 10:44:51 [http-nio-8084-exec-7] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 373, size: 8236 bytes +2025-10-29 10:44:51 [http-nio-8084-exec-8] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 374 +2025-10-29 10:44:51 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 374, size: 8236 bytes +2025-10-29 10:44:51 [http-nio-8084-exec-9] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 375 +2025-10-29 10:44:51 [http-nio-8084-exec-9] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 375, size: 8236 bytes +2025-10-29 10:44:52 [http-nio-8084-exec-10] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 376 +2025-10-29 10:44:52 [http-nio-8084-exec-10] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 376, size: 8236 bytes +2025-10-29 10:44:52 [http-nio-8084-exec-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 377 +2025-10-29 10:44:52 [http-nio-8084-exec-1] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 377, size: 8236 bytes +2025-10-29 10:44:52 [http-nio-8084-exec-2] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 378 +2025-10-29 10:44:52 [http-nio-8084-exec-2] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 378, size: 8236 bytes +2025-10-29 10:44:52 [http-nio-8084-exec-3] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 379 +2025-10-29 10:44:52 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 379, size: 8236 bytes +2025-10-29 10:44:53 [http-nio-8084-exec-4] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 380 +2025-10-29 10:44:53 [http-nio-8084-exec-4] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 380, size: 8236 bytes +2025-10-29 10:44:53 [http-nio-8084-exec-5] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 381 +2025-10-29 10:44:53 [http-nio-8084-exec-5] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 381, size: 8236 bytes +2025-10-29 10:44:53 [http-nio-8084-exec-6] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 382 +2025-10-29 10:44:53 [http-nio-8084-exec-6] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 382, size: 8236 bytes +2025-10-29 10:44:53 [http-nio-8084-exec-7] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 383 +2025-10-29 10:44:53 [http-nio-8084-exec-7] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 383, size: 8236 bytes +2025-10-29 10:44:54 [scheduling-1] DEBUG c.u.h.stt.service.AzureSpeechService - 음성 인식 실패 - NoMatch (무음 또는 인식 불가) +2025-10-29 10:44:54 [http-nio-8084-exec-8] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 384 +2025-10-29 10:44:54 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 384, size: 8236 bytes +2025-10-29 10:44:54 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - 음성 인식 결과 없음 - meetingId: test-meeting-001 +2025-10-29 10:44:54 [scheduling-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 삭제 완료 - meetingId: test-meeting-001 +2025-10-29 10:44:54 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:44:54 [http-nio-8084-exec-9] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 385 +2025-10-29 10:44:54 [http-nio-8084-exec-9] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 385, size: 8236 bytes +2025-10-29 10:44:54 [http-nio-8084-exec-10] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 386 +2025-10-29 10:44:54 [http-nio-8084-exec-10] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 386, size: 8236 bytes +2025-10-29 10:44:55 [http-nio-8084-exec-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 387 +2025-10-29 10:44:55 [http-nio-8084-exec-1] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 387, size: 8236 bytes +2025-10-29 10:44:55 [http-nio-8084-exec-2] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 388 +2025-10-29 10:44:55 [http-nio-8084-exec-2] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 388, size: 8236 bytes +2025-10-29 10:44:55 [http-nio-8084-exec-3] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 389 +2025-10-29 10:44:55 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 389, size: 8236 bytes +2025-10-29 10:44:55 [http-nio-8084-exec-4] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 390 +2025-10-29 10:44:55 [http-nio-8084-exec-4] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 390, size: 8236 bytes +2025-10-29 10:44:56 [http-nio-8084-exec-5] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 391 +2025-10-29 10:44:56 [http-nio-8084-exec-5] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 391, size: 8236 bytes +2025-10-29 10:44:56 [http-nio-8084-exec-6] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 392 +2025-10-29 10:44:56 [http-nio-8084-exec-6] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 392, size: 8236 bytes +2025-10-29 10:44:56 [http-nio-8084-exec-7] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 393 +2025-10-29 10:44:56 [http-nio-8084-exec-7] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 393, size: 8236 bytes +2025-10-29 10:44:56 [http-nio-8084-exec-8] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 394 +2025-10-29 10:44:56 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 394, size: 8236 bytes +2025-10-29 10:44:57 [http-nio-8084-exec-9] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 395 +2025-10-29 10:44:57 [http-nio-8084-exec-9] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 395, size: 8236 bytes +2025-10-29 10:44:57 [http-nio-8084-exec-10] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 396 +2025-10-29 10:44:57 [http-nio-8084-exec-10] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 396, size: 8236 bytes +2025-10-29 10:44:57 [http-nio-8084-exec-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 397 +2025-10-29 10:44:57 [http-nio-8084-exec-1] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 397, size: 8236 bytes +2025-10-29 10:44:57 [http-nio-8084-exec-2] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 398 +2025-10-29 10:44:57 [http-nio-8084-exec-2] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 398, size: 8236 bytes +2025-10-29 10:44:58 [http-nio-8084-exec-3] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 399 +2025-10-29 10:44:58 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 399, size: 8236 bytes +2025-10-29 10:44:58 [http-nio-8084-exec-4] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 400 +2025-10-29 10:44:58 [http-nio-8084-exec-4] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 400, size: 8236 bytes +2025-10-29 10:44:58 [http-nio-8084-exec-5] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 401 +2025-10-29 10:44:58 [http-nio-8084-exec-5] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 401, size: 8236 bytes +2025-10-29 10:44:58 [http-nio-8084-exec-6] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 402 +2025-10-29 10:44:58 [http-nio-8084-exec-6] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 402, size: 8236 bytes +2025-10-29 10:44:59 [http-nio-8084-exec-7] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 403 +2025-10-29 10:44:59 [http-nio-8084-exec-7] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 403, size: 8236 bytes +2025-10-29 10:44:59 [http-nio-8084-exec-8] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 404 +2025-10-29 10:44:59 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 404, size: 8236 bytes +2025-10-29 10:44:59 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:44:59 [scheduling-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 조회 완료 - meetingId: test-meeting-001, count: 20 +2025-10-29 10:44:59 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 오디오 청크 조회 완료 - meetingId: test-meeting-001, chunks: 20개 +2025-10-29 10:44:59 [scheduling-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 병합 완료 - chunks: 20, totalSize: 164720 +2025-10-29 10:44:59 [http-nio-8084-exec-9] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 405 +2025-10-29 10:44:59 [http-nio-8084-exec-9] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 405, size: 8236 bytes +2025-10-29 10:44:59 [http-nio-8084-exec-10] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 406 +2025-10-29 10:44:59 [http-nio-8084-exec-10] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 406, size: 8236 bytes +2025-10-29 10:45:00 [http-nio-8084-exec-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 407 +2025-10-29 10:45:00 [http-nio-8084-exec-1] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 407, size: 8236 bytes +2025-10-29 10:45:00 [http-nio-8084-exec-2] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 408 +2025-10-29 10:45:00 [http-nio-8084-exec-2] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 408, size: 8236 bytes +2025-10-29 10:45:00 [http-nio-8084-exec-3] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 409 +2025-10-29 10:45:00 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 409, size: 8236 bytes +2025-10-29 10:45:00 [http-nio-8084-exec-4] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 410 +2025-10-29 10:45:00 [http-nio-8084-exec-4] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 410, size: 8236 bytes +2025-10-29 10:45:01 [http-nio-8084-exec-5] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 411 +2025-10-29 10:45:01 [http-nio-8084-exec-5] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 411, size: 8236 bytes +2025-10-29 10:45:01 [http-nio-8084-exec-6] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 412 +2025-10-29 10:45:01 [http-nio-8084-exec-6] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 412, size: 8236 bytes +2025-10-29 10:45:01 [http-nio-8084-exec-7] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 413 +2025-10-29 10:45:01 [http-nio-8084-exec-7] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 413, size: 8236 bytes +2025-10-29 10:45:01 [http-nio-8084-exec-8] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 414 +2025-10-29 10:45:01 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 414, size: 8236 bytes +2025-10-29 10:45:02 [http-nio-8084-exec-9] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 415 +2025-10-29 10:45:02 [http-nio-8084-exec-9] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 415, size: 8236 bytes +2025-10-29 10:45:02 [http-nio-8084-exec-10] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 416 +2025-10-29 10:45:02 [http-nio-8084-exec-10] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 416, size: 8236 bytes +2025-10-29 10:45:02 [scheduling-1] DEBUG c.u.h.stt.service.AzureSpeechService - 음성 인식 실패 - NoMatch (무음 또는 인식 불가) +2025-10-29 10:45:02 [http-nio-8084-exec-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 417 +2025-10-29 10:45:02 [http-nio-8084-exec-1] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 417, size: 8236 bytes +2025-10-29 10:45:02 [http-nio-8084-exec-2] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 418 +2025-10-29 10:45:02 [http-nio-8084-exec-2] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 418, size: 8236 bytes +2025-10-29 10:45:02 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - 음성 인식 결과 없음 - meetingId: test-meeting-001 +2025-10-29 10:45:02 [scheduling-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 삭제 완료 - meetingId: test-meeting-001 +2025-10-29 10:45:02 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:45:03 [http-nio-8084-exec-3] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 419 +2025-10-29 10:45:03 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 419, size: 8236 bytes +2025-10-29 10:45:03 [http-nio-8084-exec-4] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 420 +2025-10-29 10:45:03 [http-nio-8084-exec-4] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 420, size: 8236 bytes +2025-10-29 10:45:03 [http-nio-8084-exec-5] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 421 +2025-10-29 10:45:03 [http-nio-8084-exec-5] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 421, size: 8236 bytes +2025-10-29 10:45:03 [http-nio-8084-exec-6] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 422 +2025-10-29 10:45:03 [http-nio-8084-exec-6] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 422, size: 8236 bytes +2025-10-29 10:45:04 [http-nio-8084-exec-7] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 423 +2025-10-29 10:45:04 [http-nio-8084-exec-7] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 423, size: 8236 bytes +2025-10-29 10:45:04 [http-nio-8084-exec-8] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 424 +2025-10-29 10:45:04 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 424, size: 8236 bytes +2025-10-29 10:45:04 [http-nio-8084-exec-9] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 425 +2025-10-29 10:45:04 [http-nio-8084-exec-9] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 425, size: 8236 bytes +2025-10-29 10:45:05 [http-nio-8084-exec-10] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 426 +2025-10-29 10:45:05 [http-nio-8084-exec-10] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 426, size: 8236 bytes +2025-10-29 10:45:05 [http-nio-8084-exec-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 427 +2025-10-29 10:45:05 [http-nio-8084-exec-1] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 427, size: 8236 bytes +2025-10-29 10:45:05 [http-nio-8084-exec-2] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 428 +2025-10-29 10:45:05 [http-nio-8084-exec-2] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 428, size: 8236 bytes +2025-10-29 10:45:05 [http-nio-8084-exec-3] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 429 +2025-10-29 10:45:05 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 429, size: 8236 bytes +2025-10-29 10:45:06 [http-nio-8084-exec-4] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 430 +2025-10-29 10:45:06 [http-nio-8084-exec-4] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 430, size: 8236 bytes +2025-10-29 10:45:06 [http-nio-8084-exec-5] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 431 +2025-10-29 10:45:06 [http-nio-8084-exec-5] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 431, size: 8236 bytes +2025-10-29 10:45:06 [http-nio-8084-exec-6] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 432 +2025-10-29 10:45:06 [http-nio-8084-exec-6] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 432, size: 8236 bytes +2025-10-29 10:45:06 [http-nio-8084-exec-7] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 433 +2025-10-29 10:45:06 [http-nio-8084-exec-7] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 433, size: 8236 bytes +2025-10-29 10:45:07 [http-nio-8084-exec-8] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 434 +2025-10-29 10:45:07 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 434, size: 8236 bytes +2025-10-29 10:45:07 [http-nio-8084-exec-9] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 435 +2025-10-29 10:45:07 [http-nio-8084-exec-9] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 435, size: 8236 bytes +2025-10-29 10:45:07 [http-nio-8084-exec-10] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 436 +2025-10-29 10:45:07 [http-nio-8084-exec-10] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 436, size: 8236 bytes +2025-10-29 10:45:07 [http-nio-8084-exec-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 437 +2025-10-29 10:45:07 [http-nio-8084-exec-1] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 437, size: 8236 bytes +2025-10-29 10:45:08 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:45:08 [scheduling-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 조회 완료 - meetingId: test-meeting-001, count: 19 +2025-10-29 10:45:08 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 오디오 청크 조회 완료 - meetingId: test-meeting-001, chunks: 19개 +2025-10-29 10:45:08 [scheduling-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 병합 완료 - chunks: 19, totalSize: 156484 +2025-10-29 10:45:08 [http-nio-8084-exec-2] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 438 +2025-10-29 10:45:08 [http-nio-8084-exec-2] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 438, size: 8236 bytes +2025-10-29 10:45:08 [http-nio-8084-exec-3] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 439 +2025-10-29 10:45:08 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 439, size: 8236 bytes +2025-10-29 10:45:08 [http-nio-8084-exec-4] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 440 +2025-10-29 10:45:08 [http-nio-8084-exec-4] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 440, size: 8236 bytes +2025-10-29 10:45:08 [http-nio-8084-exec-5] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 441 +2025-10-29 10:45:08 [http-nio-8084-exec-5] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 441, size: 8236 bytes +2025-10-29 10:45:09 [http-nio-8084-exec-6] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 442 +2025-10-29 10:45:09 [http-nio-8084-exec-6] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 442, size: 8236 bytes +2025-10-29 10:45:09 [http-nio-8084-exec-7] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 443 +2025-10-29 10:45:09 [http-nio-8084-exec-7] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 443, size: 8236 bytes +2025-10-29 10:45:09 [http-nio-8084-exec-8] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 444 +2025-10-29 10:45:09 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 444, size: 8236 bytes +2025-10-29 10:45:09 [http-nio-8084-exec-9] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 445 +2025-10-29 10:45:09 [http-nio-8084-exec-9] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 445, size: 8236 bytes +2025-10-29 10:45:10 [scheduling-1] DEBUG c.u.h.stt.service.AzureSpeechService - 음성 인식 실패 - NoMatch (무음 또는 인식 불가) +2025-10-29 10:45:10 [http-nio-8084-exec-10] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 446 +2025-10-29 10:45:10 [http-nio-8084-exec-10] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 446, size: 8236 bytes +2025-10-29 10:45:10 [http-nio-8084-exec-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 447 +2025-10-29 10:45:10 [http-nio-8084-exec-1] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 447, size: 8236 bytes +2025-10-29 10:45:10 [http-nio-8084-exec-2] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 448 +2025-10-29 10:45:10 [http-nio-8084-exec-2] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 448, size: 8236 bytes +2025-10-29 10:45:10 [http-nio-8084-exec-3] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 449 +2025-10-29 10:45:10 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 449, size: 8236 bytes +2025-10-29 10:45:11 [http-nio-8084-exec-4] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 450 +2025-10-29 10:45:11 [http-nio-8084-exec-4] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 450, size: 8236 bytes +2025-10-29 10:45:11 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - 음성 인식 결과 없음 - meetingId: test-meeting-001 +2025-10-29 10:45:11 [scheduling-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 삭제 완료 - meetingId: test-meeting-001 +2025-10-29 10:45:11 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:45:11 [http-nio-8084-exec-5] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 451 +2025-10-29 10:45:11 [http-nio-8084-exec-5] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 451, size: 8236 bytes +2025-10-29 10:45:11 [http-nio-8084-exec-6] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 452 +2025-10-29 10:45:11 [http-nio-8084-exec-6] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 452, size: 8236 bytes +2025-10-29 10:45:11 [http-nio-8084-exec-7] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 453 +2025-10-29 10:45:11 [http-nio-8084-exec-7] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 453, size: 8236 bytes +2025-10-29 10:45:12 [http-nio-8084-exec-8] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 454 +2025-10-29 10:45:12 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 454, size: 8236 bytes +2025-10-29 10:45:12 [http-nio-8084-exec-9] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 455 +2025-10-29 10:45:12 [http-nio-8084-exec-9] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 455, size: 8236 bytes +2025-10-29 10:45:12 [http-nio-8084-exec-10] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 456 +2025-10-29 10:45:12 [http-nio-8084-exec-10] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 456, size: 8236 bytes +2025-10-29 10:45:12 [http-nio-8084-exec-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 457 +2025-10-29 10:45:12 [http-nio-8084-exec-1] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 457, size: 8236 bytes +2025-10-29 10:45:13 [http-nio-8084-exec-2] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 458 +2025-10-29 10:45:13 [http-nio-8084-exec-2] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 458, size: 8236 bytes +2025-10-29 10:45:13 [http-nio-8084-exec-3] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 459 +2025-10-29 10:45:13 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 459, size: 8236 bytes +2025-10-29 10:45:13 [http-nio-8084-exec-4] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 460 +2025-10-29 10:45:13 [http-nio-8084-exec-4] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 460, size: 8236 bytes +2025-10-29 10:45:13 [http-nio-8084-exec-5] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 461 +2025-10-29 10:45:13 [http-nio-8084-exec-5] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 461, size: 8236 bytes +2025-10-29 10:45:14 [http-nio-8084-exec-6] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 462 +2025-10-29 10:45:14 [http-nio-8084-exec-6] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 462, size: 8236 bytes +2025-10-29 10:45:14 [http-nio-8084-exec-7] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 463 +2025-10-29 10:45:14 [http-nio-8084-exec-7] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 463, size: 8236 bytes +2025-10-29 10:45:14 [http-nio-8084-exec-8] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 464 +2025-10-29 10:45:14 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 464, size: 8236 bytes +2025-10-29 10:45:15 [http-nio-8084-exec-9] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 465 +2025-10-29 10:45:15 [http-nio-8084-exec-9] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 465, size: 8236 bytes +2025-10-29 10:45:15 [http-nio-8084-exec-10] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 466 +2025-10-29 10:45:15 [http-nio-8084-exec-10] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 466, size: 8236 bytes +2025-10-29 10:45:15 [http-nio-8084-exec-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 467 +2025-10-29 10:45:15 [http-nio-8084-exec-1] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 467, size: 8236 bytes +2025-10-29 10:45:15 [http-nio-8084-exec-2] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 468 +2025-10-29 10:45:15 [http-nio-8084-exec-2] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 468, size: 8236 bytes +2025-10-29 10:45:16 [http-nio-8084-exec-3] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 469 +2025-10-29 10:45:16 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 469, size: 8236 bytes +2025-10-29 10:45:16 [http-nio-8084-exec-4] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 470 +2025-10-29 10:45:16 [http-nio-8084-exec-4] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 470, size: 8236 bytes +2025-10-29 10:45:16 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:45:16 [scheduling-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 조회 완료 - meetingId: test-meeting-001, count: 20 +2025-10-29 10:45:16 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 오디오 청크 조회 완료 - meetingId: test-meeting-001, chunks: 20개 +2025-10-29 10:45:16 [scheduling-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 병합 완료 - chunks: 20, totalSize: 164720 +2025-10-29 10:45:16 [http-nio-8084-exec-5] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 471 +2025-10-29 10:45:16 [http-nio-8084-exec-5] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 471, size: 8236 bytes +2025-10-29 10:45:16 [http-nio-8084-exec-6] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 472 +2025-10-29 10:45:16 [http-nio-8084-exec-6] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 472, size: 8236 bytes +2025-10-29 10:45:17 [http-nio-8084-exec-7] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 473 +2025-10-29 10:45:17 [http-nio-8084-exec-7] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 473, size: 8236 bytes +2025-10-29 10:45:17 [http-nio-8084-exec-8] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 474 +2025-10-29 10:45:17 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 474, size: 8236 bytes +2025-10-29 10:45:17 [http-nio-8084-exec-9] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 475 +2025-10-29 10:45:17 [http-nio-8084-exec-9] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 475, size: 8236 bytes +2025-10-29 10:45:17 [http-nio-8084-exec-10] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 476 +2025-10-29 10:45:17 [http-nio-8084-exec-10] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 476, size: 8236 bytes +2025-10-29 10:45:18 [http-nio-8084-exec-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 477 +2025-10-29 10:45:18 [http-nio-8084-exec-1] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 477, size: 8236 bytes +2025-10-29 10:45:18 [http-nio-8084-exec-2] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 478 +2025-10-29 10:45:18 [http-nio-8084-exec-2] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 478, size: 8236 bytes +2025-10-29 10:45:18 [http-nio-8084-exec-3] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 479 +2025-10-29 10:45:18 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 479, size: 8236 bytes +2025-10-29 10:45:18 [http-nio-8084-exec-4] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 480 +2025-10-29 10:45:18 [http-nio-8084-exec-4] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 480, size: 8236 bytes +2025-10-29 10:45:19 [http-nio-8084-exec-5] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 481 +2025-10-29 10:45:19 [http-nio-8084-exec-5] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 481, size: 8236 bytes +2025-10-29 10:45:19 [http-nio-8084-exec-6] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 482 +2025-10-29 10:45:19 [http-nio-8084-exec-6] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 482, size: 8236 bytes +2025-10-29 10:45:19 [scheduling-1] DEBUG c.u.h.stt.service.AzureSpeechService - 음성 인식 실패 - NoMatch (무음 또는 인식 불가) +2025-10-29 10:45:19 [http-nio-8084-exec-7] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 483 +2025-10-29 10:45:19 [http-nio-8084-exec-7] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 483, size: 8236 bytes +2025-10-29 10:45:19 [http-nio-8084-exec-8] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 484 +2025-10-29 10:45:19 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 484, size: 8236 bytes +2025-10-29 10:45:19 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - 음성 인식 결과 없음 - meetingId: test-meeting-001 +2025-10-29 10:45:19 [scheduling-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 삭제 완료 - meetingId: test-meeting-001 +2025-10-29 10:45:19 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:45:20 [http-nio-8084-exec-9] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 485 +2025-10-29 10:45:20 [http-nio-8084-exec-9] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 485, size: 8236 bytes +2025-10-29 10:45:20 [http-nio-8084-exec-10] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 486 +2025-10-29 10:45:20 [http-nio-8084-exec-10] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 486, size: 8236 bytes +2025-10-29 10:45:20 [http-nio-8084-exec-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 487 +2025-10-29 10:45:20 [http-nio-8084-exec-1] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 487, size: 8236 bytes +2025-10-29 10:45:20 [http-nio-8084-exec-2] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 488 +2025-10-29 10:45:20 [http-nio-8084-exec-2] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 488, size: 8236 bytes +2025-10-29 10:45:21 [http-nio-8084-exec-3] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 489 +2025-10-29 10:45:21 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 489, size: 8236 bytes +2025-10-29 10:45:21 [http-nio-8084-exec-4] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 490 +2025-10-29 10:45:21 [http-nio-8084-exec-4] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 490, size: 8236 bytes +2025-10-29 10:45:21 [http-nio-8084-exec-5] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 491 +2025-10-29 10:45:21 [http-nio-8084-exec-5] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 491, size: 8236 bytes +2025-10-29 10:45:21 [http-nio-8084-exec-6] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 492 +2025-10-29 10:45:21 [http-nio-8084-exec-6] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 492, size: 8236 bytes +2025-10-29 10:45:22 [http-nio-8084-exec-7] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 493 +2025-10-29 10:45:22 [http-nio-8084-exec-7] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 493, size: 8236 bytes +2025-10-29 10:45:22 [http-nio-8084-exec-8] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 494 +2025-10-29 10:45:22 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 494, size: 8236 bytes +2025-10-29 10:45:22 [http-nio-8084-exec-9] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 495 +2025-10-29 10:45:22 [http-nio-8084-exec-9] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 495, size: 8236 bytes +2025-10-29 10:45:22 [http-nio-8084-exec-10] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 496 +2025-10-29 10:45:22 [http-nio-8084-exec-10] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 496, size: 8236 bytes +2025-10-29 10:45:23 [http-nio-8084-exec-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 497 +2025-10-29 10:45:23 [http-nio-8084-exec-1] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 497, size: 8236 bytes +2025-10-29 10:45:23 [http-nio-8084-exec-2] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 498 +2025-10-29 10:45:23 [http-nio-8084-exec-2] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 498, size: 8236 bytes +2025-10-29 10:45:23 [http-nio-8084-exec-3] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 499 +2025-10-29 10:45:23 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 499, size: 8236 bytes +2025-10-29 10:45:23 [http-nio-8084-exec-4] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 500 +2025-10-29 10:45:23 [http-nio-8084-exec-4] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 500, size: 8236 bytes +2025-10-29 10:45:24 [http-nio-8084-exec-5] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 501 +2025-10-29 10:45:24 [http-nio-8084-exec-5] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 501, size: 8236 bytes +2025-10-29 10:45:24 [http-nio-8084-exec-6] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 502 +2025-10-29 10:45:24 [http-nio-8084-exec-6] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 502, size: 8236 bytes +2025-10-29 10:45:24 [http-nio-8084-exec-7] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 503 +2025-10-29 10:45:24 [http-nio-8084-exec-7] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 503, size: 8236 bytes +2025-10-29 10:45:24 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:45:24 [scheduling-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 조회 완료 - meetingId: test-meeting-001, count: 19 +2025-10-29 10:45:24 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 오디오 청크 조회 완료 - meetingId: test-meeting-001, chunks: 19개 +2025-10-29 10:45:24 [scheduling-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 병합 완료 - chunks: 19, totalSize: 156484 +2025-10-29 10:45:24 [http-nio-8084-exec-8] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 504 +2025-10-29 10:45:24 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 504, size: 8236 bytes +2025-10-29 10:45:25 [http-nio-8084-exec-9] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 505 +2025-10-29 10:45:25 [http-nio-8084-exec-9] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 505, size: 8236 bytes +2025-10-29 10:45:25 [http-nio-8084-exec-10] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 506 +2025-10-29 10:45:25 [http-nio-8084-exec-10] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 506, size: 8236 bytes +2025-10-29 10:45:25 [http-nio-8084-exec-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 507 +2025-10-29 10:45:25 [http-nio-8084-exec-1] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 507, size: 8236 bytes +2025-10-29 10:45:26 [http-nio-8084-exec-2] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 508 +2025-10-29 10:45:26 [http-nio-8084-exec-2] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 508, size: 8236 bytes +2025-10-29 10:45:26 [http-nio-8084-exec-3] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 509 +2025-10-29 10:45:26 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 509, size: 8236 bytes +2025-10-29 10:45:26 [http-nio-8084-exec-4] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 510 +2025-10-29 10:45:26 [http-nio-8084-exec-4] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 510, size: 8236 bytes +2025-10-29 10:45:26 [http-nio-8084-exec-5] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 511 +2025-10-29 10:45:26 [http-nio-8084-exec-5] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 511, size: 8236 bytes +2025-10-29 10:45:27 [http-nio-8084-exec-6] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 512 +2025-10-29 10:45:27 [http-nio-8084-exec-6] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 512, size: 8236 bytes +2025-10-29 10:45:27 [http-nio-8084-exec-7] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 513 +2025-10-29 10:45:27 [http-nio-8084-exec-7] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 513, size: 8236 bytes +2025-10-29 10:45:27 [http-nio-8084-exec-8] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 514 +2025-10-29 10:45:27 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 514, size: 8236 bytes +2025-10-29 10:45:27 [http-nio-8084-exec-9] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 515 +2025-10-29 10:45:27 [http-nio-8084-exec-9] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 515, size: 8236 bytes +2025-10-29 10:45:27 [scheduling-1] DEBUG c.u.h.stt.service.AzureSpeechService - 음성 인식 실패 - NoMatch (무음 또는 인식 불가) +2025-10-29 10:45:28 [http-nio-8084-exec-10] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 516 +2025-10-29 10:45:28 [http-nio-8084-exec-10] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 516, size: 8236 bytes +2025-10-29 10:45:28 [http-nio-8084-exec-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 517 +2025-10-29 10:45:28 [http-nio-8084-exec-1] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 517, size: 8236 bytes +2025-10-29 10:45:28 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - 음성 인식 결과 없음 - meetingId: test-meeting-001 +2025-10-29 10:45:28 [scheduling-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 삭제 완료 - meetingId: test-meeting-001 +2025-10-29 10:45:28 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:45:28 [http-nio-8084-exec-2] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 518 +2025-10-29 10:45:28 [http-nio-8084-exec-2] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 518, size: 8236 bytes +2025-10-29 10:45:28 [http-nio-8084-exec-3] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 519 +2025-10-29 10:45:28 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 519, size: 8236 bytes +2025-10-29 10:45:29 [http-nio-8084-exec-4] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 520 +2025-10-29 10:45:29 [http-nio-8084-exec-4] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 520, size: 8236 bytes +2025-10-29 10:45:29 [http-nio-8084-exec-5] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 521 +2025-10-29 10:45:29 [http-nio-8084-exec-5] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 521, size: 8236 bytes +2025-10-29 10:45:29 [http-nio-8084-exec-6] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 522 +2025-10-29 10:45:29 [http-nio-8084-exec-6] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 522, size: 8236 bytes +2025-10-29 10:45:29 [http-nio-8084-exec-7] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 523 +2025-10-29 10:45:29 [http-nio-8084-exec-7] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 523, size: 8236 bytes +2025-10-29 10:45:30 [http-nio-8084-exec-8] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 524 +2025-10-29 10:45:30 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 524, size: 8236 bytes +2025-10-29 10:45:30 [http-nio-8084-exec-9] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 525 +2025-10-29 10:45:30 [http-nio-8084-exec-9] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 525, size: 8236 bytes +2025-10-29 10:45:30 [http-nio-8084-exec-10] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 526 +2025-10-29 10:45:30 [http-nio-8084-exec-10] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 526, size: 8236 bytes +2025-10-29 10:45:30 [http-nio-8084-exec-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 527 +2025-10-29 10:45:30 [http-nio-8084-exec-1] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 527, size: 8236 bytes +2025-10-29 10:45:31 [http-nio-8084-exec-2] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 528 +2025-10-29 10:45:31 [http-nio-8084-exec-2] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 528, size: 8236 bytes +2025-10-29 10:45:31 [http-nio-8084-exec-3] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 529 +2025-10-29 10:45:31 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 529, size: 8236 bytes +2025-10-29 10:45:31 [http-nio-8084-exec-4] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 530 +2025-10-29 10:45:31 [http-nio-8084-exec-4] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 530, size: 8236 bytes +2025-10-29 10:45:31 [http-nio-8084-exec-5] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 531 +2025-10-29 10:45:31 [http-nio-8084-exec-5] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 531, size: 8236 bytes +2025-10-29 10:45:32 [http-nio-8084-exec-6] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 532 +2025-10-29 10:45:32 [http-nio-8084-exec-6] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 532, size: 8236 bytes +2025-10-29 10:45:32 [http-nio-8084-exec-7] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 533 +2025-10-29 10:45:32 [http-nio-8084-exec-7] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 533, size: 8236 bytes +2025-10-29 10:45:32 [http-nio-8084-exec-8] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 534 +2025-10-29 10:45:32 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 534, size: 8236 bytes +2025-10-29 10:45:32 [http-nio-8084-exec-9] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 535 +2025-10-29 10:45:32 [http-nio-8084-exec-9] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 535, size: 8236 bytes +2025-10-29 10:45:33 [http-nio-8084-exec-10] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 536 +2025-10-29 10:45:33 [http-nio-8084-exec-10] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 536, size: 8236 bytes +2025-10-29 10:45:33 [http-nio-8084-exec-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 537 +2025-10-29 10:45:33 [http-nio-8084-exec-1] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 537, size: 8236 bytes +2025-10-29 10:45:33 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:45:33 [scheduling-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 조회 완료 - meetingId: test-meeting-001, count: 20 +2025-10-29 10:45:33 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 오디오 청크 조회 완료 - meetingId: test-meeting-001, chunks: 20개 +2025-10-29 10:45:33 [scheduling-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 병합 완료 - chunks: 20, totalSize: 164720 +2025-10-29 10:45:33 [http-nio-8084-exec-2] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 538 +2025-10-29 10:45:33 [http-nio-8084-exec-2] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 538, size: 8236 bytes +2025-10-29 10:45:33 [http-nio-8084-exec-3] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 539 +2025-10-29 10:45:33 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 539, size: 8236 bytes +2025-10-29 10:45:34 [http-nio-8084-exec-4] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 540 +2025-10-29 10:45:34 [http-nio-8084-exec-4] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 540, size: 8236 bytes +2025-10-29 10:45:34 [http-nio-8084-exec-5] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 541 +2025-10-29 10:45:34 [http-nio-8084-exec-5] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 541, size: 8236 bytes +2025-10-29 10:45:34 [http-nio-8084-exec-6] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 542 +2025-10-29 10:45:34 [http-nio-8084-exec-6] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 542, size: 8236 bytes +2025-10-29 10:45:34 [http-nio-8084-exec-7] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 543 +2025-10-29 10:45:34 [http-nio-8084-exec-7] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 543, size: 8236 bytes +2025-10-29 10:45:35 [http-nio-8084-exec-8] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 544 +2025-10-29 10:45:35 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 544, size: 8236 bytes +2025-10-29 10:45:35 [http-nio-8084-exec-9] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 545 +2025-10-29 10:45:35 [http-nio-8084-exec-9] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 545, size: 8236 bytes +2025-10-29 10:45:35 [http-nio-8084-exec-10] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 546 +2025-10-29 10:45:35 [http-nio-8084-exec-10] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 546, size: 8236 bytes +2025-10-29 10:45:35 [http-nio-8084-exec-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 547 +2025-10-29 10:45:35 [http-nio-8084-exec-1] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 547, size: 8236 bytes +2025-10-29 10:45:36 [scheduling-1] DEBUG c.u.h.stt.service.AzureSpeechService - 음성 인식 실패 - NoMatch (무음 또는 인식 불가) +2025-10-29 10:45:36 [http-nio-8084-exec-2] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 548 +2025-10-29 10:45:36 [http-nio-8084-exec-2] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 548, size: 8236 bytes +2025-10-29 10:45:36 [http-nio-8084-exec-3] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 549 +2025-10-29 10:45:36 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 549, size: 8236 bytes +2025-10-29 10:45:36 [http-nio-8084-exec-4] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 550 +2025-10-29 10:45:36 [http-nio-8084-exec-4] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 550, size: 8236 bytes +2025-10-29 10:45:37 [http-nio-8084-exec-5] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 551 +2025-10-29 10:45:37 [http-nio-8084-exec-5] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 551, size: 8236 bytes +2025-10-29 10:45:37 [http-nio-8084-exec-6] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 552 +2025-10-29 10:45:37 [http-nio-8084-exec-6] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 552, size: 8236 bytes +2025-10-29 10:45:37 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - 음성 인식 결과 없음 - meetingId: test-meeting-001 +2025-10-29 10:45:37 [scheduling-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 삭제 완료 - meetingId: test-meeting-001 +2025-10-29 10:45:37 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:45:37 [http-nio-8084-exec-7] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 553 +2025-10-29 10:45:37 [http-nio-8084-exec-7] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 553, size: 8236 bytes +2025-10-29 10:45:37 [http-nio-8084-exec-8] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 554 +2025-10-29 10:45:37 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 554, size: 8236 bytes +2025-10-29 10:45:38 [http-nio-8084-exec-9] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 555 +2025-10-29 10:45:38 [http-nio-8084-exec-9] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 555, size: 8236 bytes +2025-10-29 10:45:38 [http-nio-8084-exec-10] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 556 +2025-10-29 10:45:38 [http-nio-8084-exec-10] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 556, size: 8236 bytes +2025-10-29 10:45:38 [http-nio-8084-exec-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 557 +2025-10-29 10:45:38 [http-nio-8084-exec-1] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 557, size: 8236 bytes +2025-10-29 10:45:38 [http-nio-8084-exec-2] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 558 +2025-10-29 10:45:38 [http-nio-8084-exec-2] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 558, size: 8236 bytes +2025-10-29 10:45:39 [http-nio-8084-exec-3] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 559 +2025-10-29 10:45:39 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 559, size: 8236 bytes +2025-10-29 10:45:39 [http-nio-8084-exec-4] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 560 +2025-10-29 10:45:39 [http-nio-8084-exec-4] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 560, size: 8236 bytes +2025-10-29 10:45:39 [http-nio-8084-exec-5] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 561 +2025-10-29 10:45:39 [http-nio-8084-exec-5] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 561, size: 8236 bytes +2025-10-29 10:45:39 [http-nio-8084-exec-6] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 562 +2025-10-29 10:45:39 [http-nio-8084-exec-6] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 562, size: 8236 bytes +2025-10-29 10:45:40 [http-nio-8084-exec-7] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 563 +2025-10-29 10:45:40 [http-nio-8084-exec-7] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 563, size: 8236 bytes +2025-10-29 10:45:40 [http-nio-8084-exec-8] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 564 +2025-10-29 10:45:40 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 564, size: 8236 bytes +2025-10-29 10:45:40 [http-nio-8084-exec-9] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 565 +2025-10-29 10:45:40 [http-nio-8084-exec-9] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 565, size: 8236 bytes +2025-10-29 10:45:40 [http-nio-8084-exec-10] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 566 +2025-10-29 10:45:40 [http-nio-8084-exec-10] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 566, size: 8236 bytes +2025-10-29 10:45:41 [http-nio-8084-exec-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 567 +2025-10-29 10:45:41 [http-nio-8084-exec-1] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 567, size: 8236 bytes +2025-10-29 10:45:41 [http-nio-8084-exec-2] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 568 +2025-10-29 10:45:41 [http-nio-8084-exec-2] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 568, size: 8236 bytes +2025-10-29 10:45:41 [http-nio-8084-exec-3] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 569 +2025-10-29 10:45:41 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 569, size: 8236 bytes +2025-10-29 10:45:41 [http-nio-8084-exec-4] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 570 +2025-10-29 10:45:41 [http-nio-8084-exec-4] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 570, size: 8236 bytes +2025-10-29 10:45:42 [http-nio-8084-exec-5] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 571 +2025-10-29 10:45:42 [http-nio-8084-exec-5] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 571, size: 8236 bytes +2025-10-29 10:45:42 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 시작 - 활성 회의: 1개 +2025-10-29 10:45:42 [scheduling-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 조회 완료 - meetingId: test-meeting-001, count: 19 +2025-10-29 10:45:42 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 오디오 청크 조회 완료 - meetingId: test-meeting-001, chunks: 19개 +2025-10-29 10:45:42 [scheduling-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 병합 완료 - chunks: 19, totalSize: 156484 +2025-10-29 10:45:42 [http-nio-8084-exec-6] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 572 +2025-10-29 10:45:42 [http-nio-8084-exec-6] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 572, size: 8236 bytes +2025-10-29 10:45:42 [http-nio-8084-exec-7] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 573 +2025-10-29 10:45:42 [http-nio-8084-exec-7] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 573, size: 8236 bytes +2025-10-29 10:45:42 [http-nio-8084-exec-8] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 574 +2025-10-29 10:45:42 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 574, size: 8236 bytes +2025-10-29 10:45:43 [http-nio-8084-exec-9] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 575 +2025-10-29 10:45:43 [http-nio-8084-exec-9] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 575, size: 8236 bytes +2025-10-29 10:45:43 [http-nio-8084-exec-10] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 576 +2025-10-29 10:45:43 [http-nio-8084-exec-10] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 576, size: 8236 bytes +2025-10-29 10:45:43 [http-nio-8084-exec-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 577 +2025-10-29 10:45:43 [http-nio-8084-exec-1] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 577, size: 8236 bytes +2025-10-29 10:45:43 [http-nio-8084-exec-2] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 578 +2025-10-29 10:45:43 [http-nio-8084-exec-2] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 578, size: 8236 bytes +2025-10-29 10:45:44 [http-nio-8084-exec-3] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 579 +2025-10-29 10:45:44 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 579, size: 8236 bytes +2025-10-29 10:45:44 [http-nio-8084-exec-4] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 580 +2025-10-29 10:45:44 [http-nio-8084-exec-4] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 580, size: 8236 bytes +2025-10-29 10:45:44 [http-nio-8084-exec-5] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 581 +2025-10-29 10:45:44 [http-nio-8084-exec-5] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 581, size: 8236 bytes +2025-10-29 10:45:44 [http-nio-8084-exec-6] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 582 +2025-10-29 10:45:44 [http-nio-8084-exec-6] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 582, size: 8236 bytes +2025-10-29 10:45:45 [http-nio-8084-exec-7] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 583 +2025-10-29 10:45:45 [http-nio-8084-exec-7] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 583, size: 8236 bytes +2025-10-29 10:45:45 [scheduling-1] DEBUG c.u.h.stt.service.AzureSpeechService - 음성 인식 실패 - NoMatch (무음 또는 인식 불가) +2025-10-29 10:45:45 [http-nio-8084-exec-8] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 584 +2025-10-29 10:45:45 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 584, size: 8236 bytes +2025-10-29 10:45:45 [http-nio-8084-exec-9] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 585 +2025-10-29 10:45:45 [http-nio-8084-exec-9] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 585, size: 8236 bytes +2025-10-29 10:45:45 [scheduling-1] DEBUG c.u.h.s.service.AudioBatchProcessor - 음성 인식 결과 없음 - meetingId: test-meeting-001 +2025-10-29 10:45:45 [scheduling-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 삭제 완료 - meetingId: test-meeting-001 +2025-10-29 10:45:45 [scheduling-1] INFO c.u.h.s.service.AudioBatchProcessor - 배치 처리 완료 +2025-10-29 10:45:45 [http-nio-8084-exec-10] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 586 +2025-10-29 10:45:45 [http-nio-8084-exec-10] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 586, size: 8236 bytes +2025-10-29 10:45:46 [http-nio-8084-exec-1] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 587 +2025-10-29 10:45:46 [http-nio-8084-exec-1] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 587, size: 8236 bytes +2025-10-29 10:45:46 [http-nio-8084-exec-2] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 588 +2025-10-29 10:45:46 [http-nio-8084-exec-2] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 588, size: 8236 bytes +2025-10-29 10:45:46 [http-nio-8084-exec-3] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 589 +2025-10-29 10:45:46 [http-nio-8084-exec-3] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 589, size: 8236 bytes +2025-10-29 10:45:46 [http-nio-8084-exec-4] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 590 +2025-10-29 10:45:46 [http-nio-8084-exec-4] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 590, size: 8236 bytes +2025-10-29 10:45:47 [http-nio-8084-exec-5] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 591 +2025-10-29 10:45:47 [http-nio-8084-exec-5] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 591, size: 8236 bytes +2025-10-29 10:45:47 [http-nio-8084-exec-6] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 592 +2025-10-29 10:45:47 [http-nio-8084-exec-6] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 592, size: 8236 bytes +2025-10-29 10:45:47 [http-nio-8084-exec-7] DEBUG c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 완료 - meetingId: test-meeting-001, chunkIndex: 593 +2025-10-29 10:45:47 [http-nio-8084-exec-7] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 593, size: 8236 bytes +2025-10-29 10:45:48 [http-nio-8084-exec-8] ERROR c.u.h.stt.service.AudioBufferService - 오디오 청크 버퍼링 실패 - meetingId: test-meeting-001 +org.springframework.data.redis.RedisSystemException: Redis command interrupted + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:60) + at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) + at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:40) + at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:38) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:310) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1012) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.lambda$doInvoke$3(LettuceConnection.java:447) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker$Synchronizer.invoke(LettuceInvoker.java:665) + at org.springframework.data.redis.connection.lettuce.LettuceInvoker.just(LettuceInvoker.java:109) + at org.springframework.data.redis.connection.lettuce.LettuceKeyCommands.expire(LettuceKeyCommands.java:199) + at org.springframework.data.redis.core.RedisTemplate.lambda$expire$14(RedisTemplate.java:695) + at org.springframework.data.redis.core.RedisTemplate.lambda$doWithKeys$22(RedisTemplate.java:790) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:411) + at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:378) + at org.springframework.data.redis.core.RedisTemplate.doWithKeys(RedisTemplate.java:790) + at org.springframework.data.redis.core.RedisTemplate.expire(RedisTemplate.java:690) + at com.unicorn.hgzero.stt.service.AudioBufferService.bufferAudioChunk(AudioBufferService.java:61) + 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.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.stt.service.AudioBufferService$$SpringCGLIB$$0.bufferAudioChunk() + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleAudioChunk(AudioWebSocketHandler.java:147) + at com.unicorn.hgzero.stt.controller.AudioWebSocketHandler.handleTextMessage(AudioWebSocketHandler.java:67) + at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(AbstractWebSocketHandler.java:43) + at org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) + at org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:56) + at org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:58) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:113) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:84) + at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$3.onMessage(StandardWebSocketHandlerAdapter.java:81) + at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:390) + at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:130) + at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:484) + at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:284) + at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:130) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:85) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +Caused by: io.lettuce.core.RedisCommandInterruptedException: Command interrupted + at io.lettuce.core.protocol.AsyncCommand.await(AsyncCommand.java:87) + at io.lettuce.core.internal.Futures.awaitOrCancel(Futures.java:244) + at io.lettuce.core.LettuceFutures.awaitOrCancel(LettuceFutures.java:74) + at org.springframework.data.redis.connection.lettuce.LettuceConnection.await(LettuceConnection.java:1010) + ... 58 common frames omitted +Caused by: java.lang.InterruptedException: null + at java.base/java.util.concurrent.CompletableFuture.reportGet(CompletableFuture.java:430) + at java.base/java.util.concurrent.CompletableFuture.get(CompletableFuture.java:2140) + at io.lettuce.core.protocol.AsyncCommand.await(AsyncCommand.java:83) + ... 61 common frames omitted +2025-10-29 10:45:48 [http-nio-8084-exec-8] DEBUG c.u.h.s.c.AudioWebSocketHandler - 오디오 청크 수신 - meetingId: test-meeting-001, chunkIndex: 594, size: 8236 bytes +2025-10-29 10:45:48 [http-nio-8084-exec-8] ERROR c.u.h.s.c.AudioWebSocketHandler - WebSocket 전송 오류 - sessionId: 780fc2cf-e314-1144-270b-7fddec910c54 +java.nio.channels.ClosedChannelException: null + at org.apache.tomcat.util.net.NioEndpoint$NioSocketWrapper.fillReadBuffer(NioEndpoint.java:1251) + at org.apache.tomcat.util.net.NioEndpoint$NioSocketWrapper.read(NioEndpoint.java:1181) + at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:74) + at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:184) + at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:164) + at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:152) + at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:60) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:57) + 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:1575) +2025-10-29 10:45:48 [http-nio-8084-exec-8] INFO c.u.h.s.c.AudioWebSocketHandler - WebSocket 연결 종료 - sessionId: 780fc2cf-e314-1144-270b-7fddec910c54, meetingId: test-meeting-001, status: CloseStatus[code=1006, reason=null] +2025-10-29 10:45:48 [SpringApplicationShutdownHook] INFO c.u.h.stt.service.AzureSpeechService - Azure Speech Service 종료 +2025-10-29 10:45:48 [SpringApplicationShutdownHook] INFO o.s.o.j.LocalContainerEntityManagerFactoryBean - Closing JPA EntityManagerFactory for persistence unit 'default' +2025-10-29 10:45:48 [SpringApplicationShutdownHook] TRACE o.h.type.spi.TypeConfiguration$Scope - Handling #sessionFactoryClosed from [org.hibernate.internal.SessionFactoryImpl@392af2e0] for TypeConfiguration +2025-10-29 10:45:48 [SpringApplicationShutdownHook] DEBUG o.h.type.spi.TypeConfiguration$Scope - Un-scoping TypeConfiguration [org.hibernate.type.spi.TypeConfiguration$Scope@3d5d8eb] from SessionFactory [org.hibernate.internal.SessionFactoryImpl@392af2e0] +2025-10-29 10:45:48 [SpringApplicationShutdownHook] INFO com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Shutdown initiated... +2025-10-29 10:45:48 [SpringApplicationShutdownHook] INFO com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Shutdown completed. diff --git a/stt/src/main/java/com/unicorn/hgzero/stt/service/AzureSpeechService.java b/stt/src/main/java/com/unicorn/hgzero/stt/service/AzureSpeechService.java index ece6842..9ec54e4 100644 --- a/stt/src/main/java/com/unicorn/hgzero/stt/service/AzureSpeechService.java +++ b/stt/src/main/java/com/unicorn/hgzero/stt/service/AzureSpeechService.java @@ -32,6 +32,9 @@ public class AzureSpeechService { @PostConstruct public void init() { try { + log.info("Azure Speech Service 초기화 시작 - subscriptionKey: {}, region: {}", + subscriptionKey != null && !subscriptionKey.trim().isEmpty() ? "설정됨" : "미설정", region); + if (subscriptionKey == null || subscriptionKey.trim().isEmpty()) { log.warn("Azure Speech Subscription Key 미설정 - 시뮬레이션 모드로 실행"); return; diff --git a/stt/test-websocket.html b/stt/test-websocket.html new file mode 100644 index 0000000..eac1a9e --- /dev/null +++ b/stt/test-websocket.html @@ -0,0 +1,423 @@ + + + + + + STT WebSocket 테스트 + + + +

🎤 STT WebSocket 테스트 도구

+ +
+

연결 설정

+
+ + + + +
+
연결 안 됨
+
+ +
+

녹음 제어

+
+ + + +
+
+
+
전송된 청크
+
0
+
+
+
전송 데이터
+
0 KB
+
+
+
녹음 시간
+
0초
+
+
+
+ +
+

STT 결과

+
+
+ +
+

통신 로그

+
+
+ + + +